C++ 运算符重载(超详细) 您所在的位置:网站首页 重载运算符的意义是什么 C++ 运算符重载(超详细)

C++ 运算符重载(超详细)

2024-06-30 01:37| 来源: 网络整理| 查看: 265

我们知道重载是编译器允许两者重名,有了符号重载,我们就可以自定义符号

运算符重载的实质:将运算符重载为一个函数,使用运算符就是对重载函数的调用。

注意事项

1、运算符可以重载为全局函数,此时函数的参数个数 = 运算符的操作数个数

2、运算符可以重载为成员函数,此时函数的参数个数 = 运算符的操作数个数 - 1

(运算符的操作数有一个要作为对象,调用该成员函数)

3、运算符重载不改变运算符的优先级

4、有些运算符不能被重载: .     .*  ::     ?:     sizeof

5、运算符 = () [ ]    ->   只能重载为成员函数,不能重载为全局函数

语法: operator + 符号

其实就是写一个函数,operator + 符号 是函数名,函数体里写想要实现的操作

例如: void operator+(int a) { ... }   //重载了+号运算符

加号运算符重载(+)

        我们先定义一个Person类,里面有2个成员变量,现在我们创建两个对象,再令它们相加,目的是令它们的成员变量各自相加,可以吗?不可以,如下:

class Person{ public: Person(){ //初始化数据 num_1 = 1; num_2 = 2; } int num_1; int num_2; }; Person p1, p2; Person p = p1 + p2; /*我们的目的是让: p.num_1 = p1.num_1 + p2.num_1 p.num_2 = p1.num_2 + p2.num_2 显然这不行 */

所以我们可以重载一下加号运算符,就可以实现上述操作:

1、全局函数重载

下面这段代码我们定义一个全局函数func,它可以实现传入两个对象,在内部将它们的成员各自相加,然后再返回一个Person类的类型。

Person func(Person& p1, Person& p2){ Person temp; temp.num_1 = p1.num_1 + p2.num_1; temp.num_2 = p1.num_2 + p2.num_2; return temp; }

然后我们只要把函数名 func 换成 operator+ 就大功告成了,如下:

Person operator+(Person& p1, Person& p2){ Person temp; temp.num_1 = p1.num_1 + p2.num_1; temp.num_2 = p1.num_2 + p2.num_2; return temp; }

这样编译器就已经重载好了+运算符,为了让大家更明白一点,我们先像平时一样调用这个函数,然后再写简化后的版本:

Person p1, p2; //老实调用函数: Person p = operator+(p1, p2); cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有