重载运算符操作说明(一)

简介: 重载运算符名字由关键字operator 和其后要定义的运算符号共同组成。重载的运算符也包含返回类型,参数列表,以及函数体。重载运算符函数的参数数量与该运算符作用的运算对象数量一样多。比如 一元运算符有一个参数,二元运算符有两个参数。

重载的运算符有特殊的名字的函数:
重载运算符名字由关键字operator 和其后要定义的运算符号共同组成。
重载的运算符也包含返回类型,参数列表,以及函数体。
重载运算符函数的参数数量与该运算符作用的运算对象数量一样多。比如 一元运算符有一个参数,二元运算符有两个参数。
注意·:
除了重载的函数调用运算符operator()之外,其它重载运算符不能含有默认参数。

关于 成员运算符函数的(显式)参数数量比运算符的运算对象总数少一个 的原因是
第一个左侧运算对象绑定到隐式的 this 指针上。
当运算符作用于内置类型的运算对象时,我们无法改变该运算符的含义
例:
int operator+(int , int);//错误,不能为int 重定义内置运算符
总结:只能重载已有的运算符,无权发布新的运算符号。
±*&既是一元运算符,也是二元运算符,所有这些运算符都能被重载。

下面是总结的一些是否能被重载运算符:

使用重载的运算符本质上是一次函数调用
所以这些关于运算对象求值顺序规则无法应用到重载的运算符上
一般不重载逗号运算符和取地址运算**符
因为这两种运算符已经有了内置的含义
如果重载一般它们的行为将异于常态 从而导致类的用户无法适应。
明智的使用重载运算符
运算符重载 每个运算符在用于内置类型时都有比较明确的含义。
当在内置的运算符和我们自己的操作之间存在逻辑映射关系时,运算符重载的效果最好。
过分滥用运算符重载也会使我们的类变得难以理解。
例如
把operator+定义并让它执行 减法操作 就非常的不友好了。
只有当操作的含义对于用户来说清晰明了时才使用运算符。
如果用户对运算符可能有几种不同的理解,则使用这样的运算符将产生二义性。

赋值和复合赋值运算符赋值运算符的行为与复合版本的类似

:赋值之后,左侧运算对象和右侧运算对象的值相等,并且运算符应该返回它左侧运算对象的一个引用。
重载的赋值运算应该继承而非违背其内置版本的含义。
如果类含有算术运算符则最好也提供对应的复合赋值运算符。
当我们定义运算符时,必须首先判断成员函数还是普通的非成员函数,决定是将其声明为类的成员函数还是声明为一个普通的非成员函数。

下面的准则有助于我们在将运算符定义为成员函数还是普通的非成员函数做出抉择:

●赋值(=)、下标([])、调用(l)和成员访问箭头(->)运算符必须是成员。复合赋值运算符一般来说应该是成员,但并非必须,这一点与赋值运算符不同。
●改变对象状态的运算符或者与给定类型密切相关的运算符,如递增、递诚和解引用运算符,通常应该是成员。
●具有对称性的运算符可能转换任意一端的运算对象,例如算术、相等性、关系和位运算符等,因此它们通常应该是普通的非成员函数。

目录
相关文章
|
1月前
重载运算符
重载运算符
18 0
|
1月前
|
编译器 C++
c++重载函数和重载运算符
c++重载函数和重载运算符
23 0
|
1月前
|
算法 C++ 开发者
【C++运算符重载】深入理解C++中的流运算符 >>和<<重载
【C++运算符重载】深入理解C++中的流运算符 >>和<<重载
51 0
|
6天前
|
安全 程序员 C++
C++一分钟之-重载运算符
【6月更文挑战第21天】C++的运算符重载让程序员能为自定义类型定制运算符行为,增强代码表达力。但要注意清晰性、优先级和返回类型。遵循运算符原有意义,充分测试,并用注释解释非直观设计。示例展示了如何为复数类重载`+`运算符。避免重载内置类型,注意结合性,且慎用隐式转换。重载应提升可读性而非复杂化代码。
16 2
|
1月前
|
C++ 编译器
|
1月前
|
程序员 编译器 C++
c++重载运算符和重载函数
c++重载运算符和重载函数
26 1
|
1月前
|
C语言 C++
C++|运算符重载(2)|运算符重载的方法与规则
C++|运算符重载(2)|运算符重载的方法与规则
|
1月前
|
C++ 开发者
42重载运算符的限制
42重载运算符的限制
21 0
|
1月前
|
C++
C++ operator关键字的使用(重载运算符、仿函数、类型转换操作符)
C++ operator关键字的使用(重载运算符、仿函数、类型转换操作符)
39 0
|
1月前
|
编译器 C++
[C++ 从入门到精通] 12.重载运算符、赋值运算符重载、析构函数
[C++ 从入门到精通] 12.重载运算符、赋值运算符重载、析构函数
31 0