#include <iostream>
#include <ostream>
#include <string>
using namespace std;
class T{
public:
T(){};
T(int a){num = a;};
operator int const ()//将t + 3中的t转换为int型的10,变为10 + 3,也不会调用重载的<<
{
cout << "to be int:";
return num;
}
friend ostream& operator << (ostream &out, T t)
{
out << "内部:" << t.num;
return out;
}
friend T operator + (const T& t1, const T& t2)//将t + 3中的3调用复制转换函数T(int a)将3转换为T(3),变为T(10) + T(3),会调用重载后的<<
{
T t;
t.num = t1.num + t2.num;
cout << "加" << endl;// << t.num;
return t;
}
int num;
};
int main()
{
T t(10);
cout << t + 3 << endl;
return 0;
}
编译会出现错误: ‘operator+’在‘t + 3’中的重载有歧义
所以必须去掉int()或+中的一个
1.当去掉int()的结果为:
加
内部:13
2.当去掉重载+结果为:
to be int:13