先来看一道C++二级真题
有如下类定义:
class MyClass{
public:
MyClass(int d=0): val(d) { }
____________ //运算符函数+的声明
private:
int val;
};
若要使语句序列
MyClass x(2), y(4), z;
z=7+y;
y=x+3;
能够正常运行,横线处的声明语句应为()。
A) friend MyClass operator+(MyClass, MyClass);
B) friend MyClass operator+(MyClass&, MyClass&);
C) friend MyClass operator+(MyClass, MyClass&);
D) friend MyClass operator+(MyClass&, MyClass);
【解析】程序中MyClass类给出一个默认构造函数,形参d提整数类型,默认值为0,在成员初始化列表中使用形参d初始化val成员;语句序列中两个表达式:7+y和x+3说明加法运算符函数的两个操作数可以是整型,也可以是MyClass类型,如果是整型的话,需要使用默认构造函数将整数类型隐式转换成临时的MyClass类对象,此时赋给运算符函数时,就不可以使用引用类型了,所以选项B、C、D都是错误的,选项A是正确的。
【个人解析】
为什么将整型隐式转