引言
自己写程序的时候发现一个问题,别人构造的类,对象之间可以直接赋值,而我却只能求助于拷贝构造函数,这属实难顶
那应该怎么简单高效地copy类对象呢?这就轮到运算符重载登场了
干员资料 // 运算符重载简介
简单的说,运算符重载是实现编译时多态性(动态多态)的一种形式(另一种是虚函数),运算符重载是对已有运算符赋予多重含义,以适应用户自定义的数据类型的行为。
运算符重载的实质是函数重载。事实上,C++的每一个运算符对应着一个运算符函数,在实现过程中,把指定运算表达式中的运算符转化为对运算符函数的调用,而表达式中的运算对象转化为运算符函数的实参(在编译阶段完成)eg. a+b --> operator+(a,b)
可见,运算符函数的定义与其他函数的定义类似,唯一的区别是运算符函数的函数名是由关键字operator和其后的运算符构成的。
运算符函数的一般格式为:
<返回类型说明符> operator <运算符>(<参数表>)
{
/* code */
}
特点character:
- 只能重载(大)部分C++提供的标准运算符,而且只能重载已有的运算符,不能自己另编。
- 参数个数固定,重载以后运算符的优先级和结合性都不改变,语法结构也不能改变。即对于一元运算符(前缀/后缀),有且仅有一个参数,只能重载为单目运算符;对于二元运算符(中缀),有且仅有两个参数,只能重载为双目运算符。
- 针对类对象进行操作。即重载函数的参数至少一个是class类型
- 运算符重载后的功能应与原有功能类似,含义必须清楚,不能有二义性
下面的运算符可重载:
分类 | 运算符 |
---|---|
双目算术运算符 | + (加),-(减),*(乘),/(除),% (取模) |
关系运算符 | ==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),>=(大于等于) |
逻辑运算符 | ||(逻辑或),&&(逻辑与),!(逻辑非) |
单目运算符 | + (正),-(负),*(指针),&(取地址) |
自增自减运算符 | ++(自增),–(自减) |
位运算符 | |(按位或),& (按位与),~(按位取反),^(按位异或),<< (左移),>>(右移) |
赋值运算符 | =, +=, -=, *=, /= , % = , &=, |
空间申请与释放 | new, delete, new[ ] , delete[] |
其他运算符 | ()(函数调用),->(成员访问),,(逗号),[ ](下标),{ }(花括号),类型转换运算符 |
**类型转换运算符包括int, char, long, float, int*, char*等
下面是不可重载的运算符列表:
分类 | 运算符 |
---|---|
. | 成员访问运算符 |
.* ,->* | 成员指针访问运算符 |
:: | 域运算符 |
sizeof | 长度运算符 |
? : | 条件运算符 |
# | 预处理符号 |
运算符重载的形式
来源:CSDN
作者:Lapland Stark
链接:https://blog.csdn.net/weixin_45494811/article/details/104034778