今天看到这么一道题:
template<class T> class BigNumber{
long n;
public:
BigNumber(T i):n(i){}
BigNumber operator+(BigNumber b)
{
return BigNumber(n+b.n);
}
};
已知b1,b2是BigNumber的两个对象,则下列表达式中错误的是?
A 3+3
B b1+3
C b1+b2
D 3+b1
题干中的意思不就是类里面重载了一个“+”法运算符么,所以:
A 是正常的算数加法操作 √
C 是调用了重载的“+”号运算符,实际执行起来就类似于这样:b1.operator+(b2) √
接下来重点是B和D哪个正确?
经过查资料,分析如下:
1、首先,题干中的重载运算符是作为类的成员函数的,作为类的成员函数时,如果被重载的运算符是二元运算符的话,运算符重载函数只需要一个参数,因为另一个参数是隐含的this指针;
2、加法运算符的结合型是自左向右,所以对于B来讲,执行时编译器发现b1是一个BigNumber的对象,就会去调用重载的“+”法运算符,类似于:b1.operator(3),此时的3被强制转化成BigNumber类型;所以C √
3、对于D,执行时,编译器首先检查“+”的左边,发现是一个普通int型变量,所以就不去调用重载的“+”法运算符函数了。但是“&