16-2.txt

来自「C++完美演绎 经典算法 如 /* 头文件:my_Include.h */ #i」· 文本 代码 · 共 58 行

TXT
58
字号
/* 范例: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 + =
减小字号Ctrl + -
显示快捷键?