C++之operator关键字(重载操作符) 使用总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011068702/article/details/64920247
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,

一、为什么使用操作符重载

简单的说我们基本数据比如int float 都可以比较大小 有>、<、=,但是对象需要比较大小怎么办,我们也可以用>、<、=,只不过我们需要一个通用的规范比较对象的属性,这个时候需要operator来实现。



二、实现重载的操作符

先看简单代码类成员函数实现重载和非类成员函数(全局函数)




1)、操作符重载实现为类成员函数

重载的操作符在类体中被声明,声明方式如同普通成员函数一样,只不过他的名字包含关键字operator,以及紧跟其后的一个c++预定义的操作符。
可以用如下的方式来声明一个预定义的==操作符:
理解时应将operator==整体上视为一个函数名。
这里,因为operator ==是class person的一个成员函数,所以对象p1,p2都可以调用该函数,上面的if语句中,相当于p1调用函数==,把p2作为该函数的一个参数传递给该函数,从而实现了两个对象的比较。

2)、操作符重载实现为非类成员函数(全局函数)


也就是通过全局函数实现,和类没有关系了,只是参数用的类的引用



三、运行结果




四、如何决定把一个操作符重载为类成员函数还是全局名字空间的成员

①如果一个重载操作符是类成员,那么只有当与他一起使用的左操作数是该类的对象时,该操作符才会被调用。如果该操作符的左操作数必须是其他的类型,则操作符必须被重载为全局名字空间的成员。
②C++要求赋值=,下标[],调用(), 和成员指向-> 操作符必须被定义为类成员操作符。任何把这些操作符定义为名字空间成员的定义都会被标记为编译时刻错误。
③如果有一个操作数是类类型如string类的情形那么对于对称操作符比如等于操作符最好定义为全局名字空间成员。

以下是C++ operator重载的例子



猜你喜欢

转载自blog.csdn.net/u011068702/article/details/64920247
今日推荐