C++2011年3月国二C++考试试题中有两个疑问。
#include <iostream>
using namespace std;
class BigNumber
{
long n;
public:
BigNumber(int i=0):n(i){}
BigNumber operator+(BigNumber b)
{
return BigNumber(n+b.n);
}
};
void main()
{
BigNumber b1,b2;
// 3+b1;//这个为什么是错误的?
b1+3;//这个为什么是正确的?
}
24. 若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是()
A operator long()const;
B operator long(BigNumber);
C long operator long()const;
D long operator long (BigNumber);
补充:24题B为什么不对?
另外看了下面两个答案,对于第一题也是感觉没有解释清楚。
追问:对于第一个问题我心中有数了,但是第二个问题你解释的我看不懂,我还要再研究下书上是怎么说的。另外您不是说可以看C++primer吗? 我有这本书,你觉得哪章能给予我答案?第一题可以过了,现在再研究第24题,貌似我还是不太明白哦。
答案:不好意思,有点看错了,不过答案还是一样的
1BigNumber operator+(BigNumber b)
编译的时候第一个参数是*this,第二个参数才是BigNumber b,b1+3;
3发生了隐式转换,变成了一个类。如果你在构造函数加个explict就两种都是错的
explict BigNumber(int i=0):n(i){}
所以说这种一般定义为friend外部函数
2 A 标准格式,可以看c++primer .二楼只知其一不知其二。要求的是类型转换,不是操作符重载
其他:你可以仔细看看operator+的重载
《
BigNumber operator+(BigNumber b)//这里很清楚的可以看到,对+做重载的是一个BigNumber的对象
{
return BigNumber(n+b.n);//这里做完重载后,返回一个BigNumber的对象
}
》
对于3+b1就是对操作对象的顺序错误,也不能正确返回值。而且对于3,它并不是一个BigNumber的对象,不会自动进行+的重载。而b1+3符合+的运算符重载规则,并且能正确返回值。(做完此次操作后,即b1=b1+3)
24题答案应该是D。
重载的模式: 返回值类型 operator 重载符号 (操作数类型)
上一个:关于c++函数参数的问题
下一个:VC++中报错“cannot open file '.\Debug\BtnST.sbr': No such file or directory