📄 16-2.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 + -