当前位置:编程学习 > C/C++ >>

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

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,