“不起眼”的运算符重载-C++

引言

自己写程序的时候发现一个问题,别人构造的类,对象之间可以直接赋值,而我却只能求助于拷贝构造函数,这属实难顶
那应该怎么简单高效地copy类对象呢?这就轮到运算符重载登场了


干员资料 // 运算符重载简介

简单的说,运算符重载是实现编译时多态性(动态多态)的一种形式(另一种是虚函数),运算符重载是对已有运算符赋予多重含义,以适应用户自定义的数据类型的行为。

运算符重载的实质是函数重载。事实上,C++的每一个运算符对应着一个运算符函数,在实现过程中,把指定运算表达式中的运算符转化为对运算符函数的调用,而表达式中的运算对象转化为运算符函数的实参(在编译阶段完成)eg. a+b --> operator+(a,b)可见,运算符函数的定义与其他函数的定义类似,唯一的区别是运算符函数的函数名是由关键字operator和其后的运算符构成的。

运算符函数的一般格式为:

<返回类型说明符> operator <运算符>(<参数表>)
{
	/* code */
}

特点character:

  1. 只能重载(大)部分C++提供的标准运算符,而且只能重载已有的运算符,不能自己另编。
  2. 参数个数固定,重载以后运算符的优先级和结合性都不改变,语法结构也不能改变。即对于一元运算符(前缀/后缀),有且仅有一个参数,只能重载为单目运算符;对于二元运算符(中缀),有且仅有两个参数,只能重载为双目运算符。
  3. 针对类对象进行操作。即重载函数的参数至少一个是class类型
  4. 运算符重载后的功能应与原有功能类似,含义必须清楚,不能有二义性

下面的运算符可重载:

分类运算符
双目算术运算符+ (加),-(减),*(乘),/(除),% (取模)
关系运算符==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),>=(大于等于)
逻辑运算符||(逻辑或),&&(逻辑与),!(逻辑非)
单目运算符+ (正),-(负),*(指针),&(取地址)
自增自减运算符++(自增),–(自减)
位运算符|(按位或),& (按位与),~(按位取反),^(按位异或),<< (左移),>>(右移)
赋值运算符=, +=, -=, *=, /= , % = , &=,
空间申请与释放new, delete, new[ ] , delete[]
其他运算符()(函数调用),->(成员访问),,(逗号),[ ](下标),{ }(花括号),类型转换运算符

**类型转换运算符包括int, char, long, float, int*, char*等

下面是不可重载的运算符列表:

分类运算符
.成员访问运算符
.* ,->*成员指针访问运算符
::域运算符
sizeof长度运算符
? :条件运算符
#预处理符号

运算符重载的形式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值