首页 > 试题广场 >

若要重载+、=、、=和[]运算符,则必须作为类成员重载的

[单选题]
若要重载+、=、<<、==和[]运算符,则必须作为类成员重载的运算符是

  • +和=
  • =和<<
  • ==和<<
  • =和[]
推荐

答案 D
解释:
          (1)只能使用成员函数重载的运算符有:=、()、[]、->、new、delete。
          (2)单目运算符最好重载为成员函数。
          (3) 对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建议重载为成员函数。
          (4) 对于其它运算符,建议重载为友元函数。

运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下:

          函数类型 operator 运算符名称 (形参表列)
          { 
          对运算符的重载处理
          }

重载为类成员函数时参数个数=原操作数个数-1(后置++、--除外)
重载为友元函数时 参数个数=原操作数个数,且至少应该有一个自定义类型的形参

编辑于 2015-02-10 15:26:17 回复(3)
参见:C++ Primer Plus(第6版)中文版 P387 11.2.2重载限制
下列运算符只能通过成员函数进行重载:
1)= :赋值运算符
2)( ):函数调用运算符
3)[ ]:下标运算符
4)->:通过指针访问类成员的运算符 
编辑于 2017-11-16 16:21:07 回复(0)
等于括号箭头牛逼
发表于 2019-08-13 13:44:55 回复(3)

在C++中,有一些运算符是不能被重载的,有一些只能重载为成员函数,还有一些只能重载为友元函数。下面我会分别列举出来,并解释原因:

不能被重载的运算符:

  1. .:成员访问运算符,无法被重载。
  2. .*:成员指针访问运算符,无法被重载。
  3. :::作用域运算符,无法被重载。
  4. ?::条件运算符,无法被重载。

只能重载为成员函数的运算符:

  1. 赋值运算符=
  2. 下标运算符[]
  3. 函数调用运算符()
  4. 成员访问运算符->
  5. 类型转换运算符

只能重载为友元函数的运算符:

  1. 流插入运算符<<和流提取运算符>>

原因: 不能被重载的运算符通常是因为其行为在语言层面已经有了明确定义,重载可能会导致混乱和歧义。成员访问、成员指针访问和作用域运算符等属于语言的重要组成部分,重载这些运算符可能会破坏类成员访问和作用域等语言特性的一致性。

赋值运算符、下标运算符、函数调用运算符等只能重载为成员函数的运算符,是因为它们通常涉及到对对象的状态进行改变或直接访问对象的私有成员,因此更适合作为成员函数来重载。

流插入运算符<<和流提取运算符>>只能重载为友元函数的原因在于,它们通常需要访问流对象的私有成员,但是又不属于流类的成员函数,因此将其重载为友元函数可以在不破坏封装性的前提下实现对流对象的操作。

总的来说,这些限制和规定是为了保证C++的语言特性的一致性和安全性。

发表于 2023-11-10 14:35:25 回复(0)
你懂我意思吗?我对你敬礼啊 salute
发表于 2021-01-04 19:36:36 回复(0)
 (1)只能使用成员函数重载的运算符有:=、()、[]、->、new、delete。
          (2)单目运算符最好重载为成员函数。
          (3) 对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建议重载为成员函数。
          (4) 对于其它运算符,建议重载为友元函数。

运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下:

          函数类型 operator 运算符名称 (形参表列)
          { 
          对运算符的重载处理
          }

重载为类成员函数时参数个数=原操作数个数-1(后置++、--除外)
重载为友元函数时 参数个数=原操作数个数,且至少应该有一个自定义类型的形参

发表于 2016-10-13 20:58:40 回复(0)
不能被重载的运算符:                            ::    ,*    .    ?: 必须作为成员函数重载的运算符:           =    []    ()    ->
发表于 2022-03-27 16:41:34 回复(0)
==可以用=来实现
发表于 2016-07-01 22:11:02 回复(0)
答案:D
new、delete、=、[]、-> 等只能作为类的成员函数重载
发表于 2015-01-27 19:25:55 回复(0)
等括贱闭
发表于 2022-06-08 12:53:38 回复(0)
等括箭逼
发表于 2022-05-03 16:01:29 回复(0)
答案 D
解释:
          (1)只能使用成员函数重载的运算符有:=、()、[]、->、new、delete。
          (2)单目运算符最好重载为成员函数。
          (3) 对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建议重载为成员函数。
          (4) 对于其它运算符,建议重载为友元函数。

运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下:

          函数类型 operator 运算符名称 (形参表列)
          { 
          对运算符的重载处理
          }

重载为类成员函数时参数个数=原操作数个数-1(后置++、--除外)
重载为友元函数时 参数个数=原操作数个数,且至少应该有一个自定义类型的形参

发表于 2021-10-16 17:20:16 回复(0)
(1)只能使用成员函数重载的运算符有:=、()、[]、-&gt;、new、delete 重载为类成员函数时参数个数=原操作数个数-1(后置++、--除外) 重载为友元函数时 参数个数=原操作数个数,且至少应该有一个自定义类型的形参
编辑于 2020-07-26 21:19:33 回复(0)

重载运算符

发表于 2019-04-22 21:24:25 回复(0)

其他的运算符我也都不怎么理解的

发表于 2019-03-09 14:52:32 回复(0)
参见:C++ Primer Plus(第6版)中文版 P387 11.2.2重载限制 下列运算符只能通过成员函数进行重载: 1)= :赋值运算符 2)( ):函数调用运算符 3)[ ]:下标运算符 4)->:通过指针访问类成员的运算符 
发表于 2018-11-28 15:24:48 回复(0)
new delete = -> []
发表于 2017-09-22 08:25:38 回复(1)
参考C++编程思想12.4.1
必须是成员的有:=、()、[]、->、->*
发表于 2016-09-06 08:45:55 回复(0)