C++ 运算符重载(超详细) | 您所在的位置:网站首页 › 重载运算符的意义是什么 › C++ 运算符重载(超详细) |
我们知道重载是编译器允许两者重名,有了符号重载,我们就可以自定义符号 运算符重载的实质:将运算符重载为一个函数,使用运算符就是对重载函数的调用。 注意事项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 实验室设备网 版权所有 |