哪个操作符不能作为类成员函数被重载?

365bet备用器 📅 2025-07-10 11:04:37 ✍️ admin 👀 8825 ❤️ 781
哪个操作符不能作为类成员函数被重载?

44

推荐

revivedSuN

A.应该说的是 三目运算符

查看全部

编辑于 2015-12-18 09:40:37

回复(4)

1

陈林达

三目运算符为什么不能重载

发表于 2019-02-20 23:10:44

回复(0)

67

流浪诗人

先纠正下,题目选项中,A的本意肯定是

?: ,后面会更正过来的,下面具体探讨下C++中不能重载的运算符:“

?:

”、

.

”、“

::

” 、“

sizeof

”和“.*”,原因如下:

在具体讲解各个运算符不能重载之前,先来说明下【重载】:

重载的本意是让操作符可以有新的语义,而不是更改语法——否则会引起混乱。

【注】重载的部分规则:

运算符函数的参数至少有一个必须是类的对象或者类的对象的引用。

(1).

?:

”运算符,假如能够重载,那么问题来了,看下面的语句:

exp1?exp2:exp3

该运算符的本意是执行exp2和exp3中的一个,可是重载后,你能保证只执行了一个吗?还是说两个都能执行?亦或两条都不能执行?

?:

”运算符的跳转性质就不复存在了,

这就是

?:

运算符不能够被重载的最主要原因。

(2).

.

”运算符,假如能够重载,那么,问题来了,看下面的例子:

class Y {

public:

void fun();

// ...

};

class X { // 假设可以重载"."运算符

public:

Y* p;

Y& operator.()

{

return *p;

}

void fun();

// ...

};

void g(X& x){

x.fun(); //请告诉我,这里的函数fun()到底是X的,还是Y的?

}

"."运算符的本意是引用对象成员的,然而被重载后就不能保证本意,从而带来运算符意义的混淆,如果每个人都这么重载,那更不容易学习C++语言了。

(3).“

::

”运算符,M::a,该运算符只是在编译的时候域解析,而没有运算的参与进来,由前面【注】重规则可知,如果重载之后,::运算符有了新的语义,那是不是会引起混淆呢?

(4).

sizeof

”运算符,该运算符不能被重载的主要原因是内部许多指针都依赖它,举例说明重载的后果:

A b[10];//A是类

A* p = &a[3];

A* q = &a[3];

p++;//执行后,p指向a[4],记住是指向a[4]!根据C++规定,该操作等同于p+sizeof(A),此时

//p应该比q大A类所占字节的大小,事实上,p并不一定会比q大这么多,因为你把sizeof()运算

//符重载了啊!这时的sizeof(A)并不一定是该类占用的字节大小!

(5)

".*"引用成员指针运算符,具体原因后面查明白了补充~

【注】如果有哪里解释不当的地方,欢迎一起探讨~

编辑于 2016-01-11 11:00:51

回复(6)

33

kkw

不可以重载的运算符共有五个:

(1)类属关系运算符:“.”

(2)成员指针运算符:“.*”

(3)作用域:“::”

(4)sizeof

(5)三目运算符:“?:”

发表于 2015-12-16 15:17:25

回复(0)

16

夏雨天

选择A:

此外C++中不可以重载的运算符有:

?: :: . .*

发表于 2015-09-05 17:39:48

回复(0)

6

rs勿忘初心

C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。c++中绝大数的运算符允许重载,不能重载的运算符只有5个。

. (成员访问运算符) .*(成员指针访问运算符) ::(域运算符) sizeof(长度运算符) ?:(条件运算符)

发表于 2017-03-14 22:09:49

回复(0)

5

中汇信息技术最牛逼

根本就没这个符号,重载个屁。

发表于 2015-09-05 14:28:27

回复(2)

3

cao184771

没学c++这题没法做啊

发表于 2021-06-01 17:36:36

回复(0)

3

NopLL

不是所有的操作符都可以重载,不能重载的操作符 .,.*,::,?:,sizeof,typeid 记忆法:带点的都不能重载

发表于 2016-11-09 10:34:56

回复(0)

2

落阳z

带“.”的都不能被重载。

发表于 2020-03-08 10:53:11

回复(0)

2

已注销

不可运算重载符共5个:

?:

::

.

.*

sizeof(如果把这个也算上的话)

发表于 2016-07-25 20:07:36

回复(1)

1

沉浮一香蕉

不可重载运算符包括 ?: :: . .* 这四个

发表于 2022-04-29 18:16:44

回复(0)

1

稳稳滴幸福

1.重载运算符的规则 (1)C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。 (2)C++允许重载的运算符 双目运算符 +,-,*,/,% 关系运算符 ==,!=,<,>,<=,>= 逻辑运算符 ||,&&,! 单目运算符 +(正),-(负),*(指针),&(取地址) 自增自减运算符 ++,-- 位运算符 |(按位或),&(按位与),~(按位取反),∧(按位异或),<<(左移),>>(右移) 赋值运算符 =,+=,-=,*=,/=,%=,&=,|=,∧=,<<=,>>= 空间申请与释放 new,delete,new[ ],delete[ ] 其他运算符 ()(函数调用),->()成员访问),->*(成员指针访问),,(逗号),[ ](下标) 不能重载的运算符只有5个: . 成员访问运算符 * 成员指针访问运算符 :: 域运算符 sizeof 长度运算符 ?: 条件运算符

发表于 2017-09-18 22:13:35

回复(0)

0

DAZC

不能被重载的运算符

发表于 2022-12-18 19:49:41

回复(0)

0

fox001

c++中不能重载的运算符有5个:“?:”、“.”、“::”、“sizeof”、“.*” 。 “.”和“::”运算符

发表于 2022-11-19 12:50:01

回复(0)

0

牛客922265618号

带点的都不能被重置?

发表于 2022-09-14 17:14:38

回复(0)

0

i-小果子

基本的运算符加减乘除可以重载

发表于 2019-10-26 14:30:50

回复(0)

0

xiidoo

:: . :? .*

发表于 2019-03-08 22:27:34

回复(0)

0

牛客最菜的菜鸟

不能被重载的5个运算符 "?:" “.” “sizeof” “.*” "::"

发表于 2018-09-25 20:41:19

回复(0)

0

Asacho、

方便记忆的话:带"."的都不可重载

发表于 2018-09-13 21:48:37

回复(0)

0

为你扣下F键

. .* :: ?: sizeof 不能被重载

发表于 2018-08-03 18:12:22

回复(0)

相关推荐

bt365最快线路检测 2006年世界杯门将进球壮举(守护球门的王者——2006年世界杯门将的进攻魅力)
365bet备用器 华为C8816D电信3G手机全面评测(高性能配置与卓越网络体验,华为C8816D电信3G手机值得拥有!)
365彩票app下载2020 梦幻西游快乐大冒险 梦幻西游:155级龙宫的赚钱全套攻略?
bt365最快线路检测 为什么绿度母又被称为“救八难度母”?丨吉祥文化
bt365最快线路检测 女人对你撒娇说明什么

女人对你撒娇说明什么

📅 07-09 👀 9428
365彩票app下载2020 精通 iPhone 截屏:捕获、编辑、分享!
365彩票app下载2020 神州数码怎么样?

神州数码怎么样?

📅 07-07 👀 5942
365彩票app下载2020 勇士的英文翻译

勇士的英文翻译

📅 06-29 👀 612
365bet备用器 kvm vps怎么样(如何使用KVM VPS?)

友情伙伴