c++中加号运算符重载

Posted 小柯南有话说

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中加号运算符重载相关的知识,希望对你有一定的参考价值。

首先,在开始正文之前,看一个问题,想要实现两个自定义类对象相加,如何操作?


接到这个问题,刚开始,我是这样想的:


代码实现如下:



19行错误:没有与这些操作数匹配的“+”运算符。呃呃,很明显,编译器不让咱们这样操作。


可是,我们就是需要实现这样的加号功能,那该怎么做呢?


我们可以想到使用C++中的加号运算符重载方式实现。


在C++中,要实现加号运算符重载,有两个方法,第一种就是在类内部写成员函数实现,第二种全局函数实现,两个方法都有一个功能的函数名称operator+(), 这个函数名称是固定,不能写其他,不然编译器就不知道我们在实现加号运算符的重载。


第一种方法:成员函数实现加号运算符重载

类的成员函数实现operator+(),函数参数有至少一个参数,例如Add_custom_class_objects &p, 函数的返回值是Add_custom_class_objects类型,那么这个函数的代码就是下面的这种。

c++中加号运算符重载


运行结果:


c++中加号运算符重载


注意:


Add_custom_class_objects p3 = A1 + A2; // 等价于下面这行代码

Add_custom_class_objects p3 = A1.operator+(A2);


为了方便,我们可以再简化为:p3=A1+A2;


方法二全局函数实现加号运算符重载



c++中加号运算符重载



全局函数operator+(Add_custom_class_objects &p1, Add_custom_class_objects &p2) , 有两个参数,实现相加的逻辑是一样的。


最后,来看,加号运算符函数重载      


回忆下函数的重载概念就是函数名相同,函数形式参数和个数和类型不同。编译器会根据调用的时候参数个数和类型,自动去调用函数,这就是函数重载。


写段代码理解:




可以看到,这里的p3 = p1 + 15, 第二个参数是int类型的15,而不是一个Add_custom_class_objects对象,所以这里发生重载的函数是





好了,加号运算符重载,结束。



我是小柯南,我们下期见!

以上是关于c++中加号运算符重载的主要内容,如果未能解决你的问题,请参考以下文章

运算符重载(C++)

c++中运算符重载

C++如何重载指针的比较符

C++学习26 运算符重载的概念和语法

C++结构体使用及运算符重载

C++结构体使用及运算符重载