03.07 C++运算符重载的设计意义大吗?


我觉得不那么重要吧,运算符重载只是让代码好看一些,不用运算符可以用函数啊。不过作为高级语言,特别对于入门新手就很在乎这些语法。怎么说呢,对比其他语言,java C#都有这个,C++想要被更多人使用,那也是最好要有吧,多一点竞争力。



谈极品tanjp


正常使用运算符重载可以是程序更简洁,但是滥用之,则困之,滥用会是程序晦涩难懂!

1、从开发的角度而言,运算符重载的存在是为了提高开发效率,增加代码的可复用性,很多时候反而是简化了问题,具体实现被复杂化,但是暴露的接口得到了简化,使对象之间可以做运算操作的,如+-*/。

2、C++强大的原因之一是支持泛型编程。泛型编程使得算法可以独立于数据类型存在。自定义的数据类型通过操作符重载具有了和内建类型同样的使用接口,然后C++的模板加持下,你的算法可以利用这种接口一致性,实现泛化,实现算法的通用化。

3、除了提高写代码的效率,也往往降低了代码维护的成本,更容易减少bug,提高代码质量,实现低耦合。

01 运算符重载的需求

C++ 预定义的运算符,只能用于基本数据类型的运算:整型、实型、字符型、逻辑型等等,且不能用于对象的运算。但是我们有时候又很需要在对象之间能用运算符,那么这时我们就要重载运算符,使得运算符能用于对象之间的运算。

比如,在数学上,两个复数可以直接进行+、-等运算,但在C++中,直接将+或-用于复数对象是不允许的。有时会希望,让对象也能通过运算符进行运算。这样代码就更简洁,也容易理解。

02 运算符重载的形式

运算符重载的实质就是函数重载,可以重载为普通函数,也可以重载为成员函数。运算符重载的基本形式如下:

返回值类型 operator 运算符(形参表)

{

...

}

03可重载运算符/不可重载运算符

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

双目算术运算符\t+ (加),-(减),*(乘),/(除),% (取模)

关系运算符\t==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),>=(大于等于)

逻辑运算符\t||(逻辑或),&&(逻辑与),!(逻辑非)

单目运算符\t+ (正),-(负),*(指针),&(取地址)

自增自减运算符\t++(自增),--(自减)

位运算符\t| (按位或),& (按位与),~(按位取反),^(按位异或),,<< (左移),>>(右移)

赋值运算符\t=, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>=

空间申请与释放\tnew, delete, new[ ] , delete[]

其他运算符\t()(函数调用),->(成员访问),,(逗号),[](下标)

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

•\t.:成员访问运算符

•\t.*, ->*:成员指针访问运算符

•\t:::域运算符

•\tsizeof:长度运算符

•\t?::条件运算符

•\t#: 预处理符号




程序生人


有很大的生产效率意义。在设计上不是必须的,如果没有,通过代码也可以实现,如两个类相加,通过代码可以把需要相加的成员(通常不会限制公开性)加起来。如果类设计有重载加法,就会效率高很多,直接使用,且不需要太关注类细节,但同样需要关注类相加的含义说明


zlifes


意义比较大,它是为了让代码封装行和易用性的一种保障

举个简单例子,如何把一个对象用cout打印到控制台?如果没有重载操作符,会很麻烦

AI算法工程师,欢迎拍砖


CV知识点


很大,使得传统运算符在扩展数据类型(对象)可以继续使用但可以重写其业务逻辑


分享到:


相關文章: