必要性:C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)。
(一) C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载
(二) C++允许重载的运算符C++中绝大部分的运算符允许重载
不能重载的运算符只有5个:
- (1) 成员访问运算符.
- (2) 作用域运算符∷
- (3) 条件运算符?:
- (4) 成员指针运算符*
- (5) 编译预处理命令的开始符号#(转者按:应该是 sizeof 运算符)
(三) 重载不能改变运算符运算对象(即操作数)的个数
(四) 重载不能改变运算符的优先级别
(五) 重载运算符的函数不能有默认的参数,否则就改变了运算符参数的个数,与前面第(3)点矛盾
(六) 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。也就是说,参数不能全部是C++的标准类型,以防止用户修改用于标准类型数据的运算符的性质。
(七) 用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“&”不必用户重载。
- ① 赋值运算符(=)可以用于每一个类对象,可以利用它在同类对象之间相互赋值。
- ② 地址运算符&也不必重载,它能返回类对象在内存中的起始地址。
总之,当C++语言原有的一个运算符被重载之后,它原先所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符。
运算符重载可以使用成员函数和友元函数两种形式。可以参考以下的经验:
- (1)只能使用成员函数重载的运算符有:=、()、[]、->、new、delete。
- (2)单目运算符最好重载为成员函数。
- (3) 对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建议重载为成员函数。
- (4) 对于其它运算符,建议重载为友元函数。
运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下:
引用
函数类型 operator 运算符名称 (形参表列)
{
对运算符的重载处理
}
重载为类成员函数时,参数个数等于原操作数个数减1(后置++、--除外);
重载为友元函数时,参数个数等于原操作数个数,且至少应该有一个自定义类型的形参。
分享到:
相关推荐
125.C++ 重载运算符和重载函数.txt
自己做的小型分数运算器 实现了运算符的重载。
C++运算符重载:赋予运算符另一种作用,实现自定义类型的运算C++运算符重载内容: 1.友元重载 2.类重载 3.输入输出流重载
c++运算符重载,重载运算符
(1)C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。例如,有人觉得BASIC中用“* *”作为幂运算符很方便,也想在C++中将“* *”定义为幂运算符,用“3* *5”表示35,这是不行的。 (2)C++允许...
C++ 函数重载 运算符重载 类型转化 符合课本 自己写的 绝对运行 有用
当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。 C++ 中的函数重载 在同一个作用...
重载加法运算符+及大于运算符>,测试输入的长度能否构成一个三角形。构成三角形的条件是任意两边之和大于第三边。
最近在学习C++运算符重载,这是我经过整理之后的一点资料,拿出来和大家分享,希望能对大家有所帮助。另外,选择C++开发的同志们,加油^_^一起努力
对于C++重载的使用方法学习的好例子 1、符号重载的方法使用。
C++允许重载的运算符和不允许重载的运算符 C++中绝大部分的运算符允许重载,具体规定见表 不能重载的运算符只有5个: . (成员访问运算符) .* (成员指针访问运算符) :: (域运算符) sizeof (长度运算符) ?: ...
一个c++运算符重载例子.属于原创,代码比较清晰
C++_运算符重载_各类详细介绍 仅供参考
c++ 运算符重载的综合demo,知识点众多,内容强大。
详细介绍 C++运算符重载 的PPT 文中部分内容: 下标运算符“[ ]”重载 C++把下标运算符[ ]看成一个双目运算符,其操作数为<基本表达式>和<表达式>,对应的运算符为operator[ ],必须重载为一个成员函数。对于下标...
里面是一些关于C++运算符重载转换运算符的讲解
在C++中如何重载运算符
该ppt详细介绍了c++中的运算符重载,对学习者很有帮助。
重载增量运算符在运用中的总结,主要左值与右值的区别