⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 16-2.txt

📁 C++完美演绎源代码
💻 TXT
字号:
/* 范例:16-2 */
#include <iostream.h>
class B;  /* B类的声明 */
class A
{
  /* 声明全局operator+为类A的friend,则在此operator+内,可以存取类A的
     任意等级成员 */
  friend A& operator+(A& obj1,B& obj2);
  public:
    A(int A_num):num(A_num){};  /* A类的构造函数 */
    A& operator-(B obj2);
    int A_ret()
    {
      return num;
    }
  private:
    int num;
};
class B
{
  /* 声明全局operator+为类B的friend,则在此operator+内,可以存取类B的任意
     等级成员 */
  friend A& operator+(A& obj1,B& obj2);
  friend A& A::operator-(B obj2);	/* 声明A::operator-为类B的friend */
  public:
    B(int B_num):num(B_num){};	/* B类的构造函数 */
  private:
    int num;
};
void main(void)
{
  A obj1(4);  	/* 构造一个A类的对象obj1 */
  B obj2(8);  	/* 构造一个B类的对象obj2 */
  obj1=obj1+obj2;
  /* 调用operator+,因operator+是定义在全局,且设为类的friend,所以编译器
     将其编译成operator+(obj1,obj2) */
  cout <<"对象obj1+对象obj2=" <<obj1.A_ret() <<endl;
  obj1=obj1-obj2;	/* 调用operator-,因operator-是定义在类内,所以编译器将其
                  编译成obj1.operator-(obj2) */
  cout <<"对象obj1-对象obj2=" <<obj1.A_ret() <<endl;
  getchar();
}
A& A::operator-(B obj2)
{
  num=num-obj2.num;
  return *this;
}
A& operator+(A& obj1,B& obj2)  /* operatpr+定义在全局 */
{
  obj1.num=obj1.num+obj2.num;
  return obj1;
}

程序执行结果:
对象obj1+对象obj2=12
对象obj1-对象obj2=4

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -