首页 > 试题广场 >

对于用成员函数重载运算符,下面哪一种说法是错误的?

[单选题]
对于用成员函数重载运算符,下面哪一种说法是错误的?

  • 无参函数只能用来定义单目运算符,当前对象作为操作数
  • 单参函数可定义双目运算符,当前对象作为左操作数,形参作为右操作数
  • 定义后置“++”或后置“一一”运算是特例,它们是单目运算符,但需要一个int形参
  • 函数体中最后要返回当前对象作为结果
推荐
D
A.成员函数体中,当前对象作为一个操作数,无形参形式可定义单目运算符。A项正确。
B.如果有一个形参,可定义双目运算符,当前对象作为左操作数,形参作为右操作数。B项正确。
C.定义后置“++”或后置“--”运算是特例,需要一个int形参。C项正确。
运算符重载函数返回的对象应具体情况具体分析:
1.如果运算符将得到一个新结果,而不是将某个操作数作为结果,就应返回对象。例如a+b的结果是一个新对象,而a和b都不变,因此operator+应该返回返回对象。
2.如果运算符将某个操作数作为结果,那就应该返回对象引用,而不是对象。例如a+=b,结果是操作数a,因此operator+=应该返回返回对象a的引用。否则当多个运算符作用于同一对象时就可能出错。这种情形下,函数体往往不创建对象,只是返回当前对象或形参对象的引用。
因此D项错误,选D。
编辑于 2020-01-13 14:46:17 回复(0)
D。考察的是运算符重载。
举个反例即可,如下面的=运算符,返回void。
void operator=(const Distance &D )
      { 
         feet = D.feet;
         inches = D.inches;
      }
      // 显示距离的方法
      void displayDistance()
      {
         cout << "F: " << feet <<  " I:" <<  inches << endl;
      }

发表于 2020-01-11 12:32:36 回复(0)