重载运算符的问题,如何实现int + (某类对象)

#include
using namespace std;

template
class BigNumber {
T n;
public:
BigNumber(T i) :n(i) {}
BigNumber operator+(BigNumber b) {
return BigNumber(n + b.n);
}
};

int main() {
BigNumber b1(1), b2(2);
3 + 3;
b1 + 3;
3+b1;//这是错的,如何改成对的
b1 + b2;
return 0;
}

c++

2个回答

你这是以成员函数的形式重载的,左边只能由你实例化的对象来调用。 你可以使用友元函数来进行重载 函数定义为friend BigNumber operator+(int n,BigNumber num)

看看注释吧,主要是int 无法强转。如下是其中一个思路,还有一个思路是重载一个强转换,

using namespace std;
template
class BigNumber {
T n;
public:
BigNumber(T i) :n(i) {}
BigNumber operator+(BigNumber b) {
return BigNumber(n + b.n);
}
};

template
extern BigNumber operator+(T l, BigNumber r)
{
return BigNumber(l) + r;
}

int main()
{

BigNumber<int> b1(1), b2(2);
3 + 3;
b1 + 3;
3 + b1;//这个式子除非是Int 类型重载了 + bignumber的操作符,否则错误,为此最好在BigNunber 外面申明这种类型的转换
b1 + b2;

return 0;

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐