有如下类定义: class MyClass{ public: MyClass(int d=0):val(d)+{} ___________//运算符函数+的声明 private: int val; }; 若要使语句序列 MyClass x(2),y(4)

admin2021-05-06  35

问题 有如下类定义:
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、friendMyClass operator+(MyClass,MyClass);
B、friendMyClass operator+(MyClass&,MyClass&);
C、friendMyClass operator+(MyClass,MyClass&);
D、friendMyClass operator+(MyClass&,MyClass);

答案A

解析 程序中Myclass类给出一个默认构造函数,形参d是整数类型,默认值为0,在成员初始化列表中使用形参d初始化val成员;语句序列中两个表达式:7+y和x+3说明加法运算符函数的两个操作数可以是整型,也可以是MyClass类型,如果是整型的话,需要使用默认构造函数将整数类型隐式转换成临时的Myclass类对象,此时赋给运算符函数时,就不可以使用引用类型了,所以选项B、C、D都是错误的,选项A是正确的,选项A中由于两个操作数都是在形参列表,所以只能将运算符函数定义为友元函数,而不能定义为成员函数,本题答案为A。
转载请注明原文地址:https://jikaoti.com/ti/DIh0FFFM
0

最新回复(0)