有如下类定义: class MyClass{ public: MyClass(int d=0):val(d)+{} _________ //运算符函数+的声明 private: int val;

admin2020-05-14  39

问题 有如下类定义:
    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/zCA0FFFM
0

最新回复(0)