目录:
应用场景:
Person p1(100);// p1有100元
Person p2(50);// p2有50元
//现在我们要创建一个p3要求其有p1和p2人民币总和
Person p3 = p1 + p2;
如何实现上述功能?需要使用到运算符重载.
加号运算符重载:
1)不使用运算符重载来实现上述功能
class Person {
public:
Person(int money) {
this->money = money;
}
int money;
Person personAddPerson(Person& p) {
int tempMoney = this->money + p.money;
Person temp(tempMoney);
return temp;
}
};
int main() {
Person p1(100);
Person p2(50);
//我们不用运算符重载也能实现类似功能
Person p3 = p1.personAddPerson(p2);
return 0;
}
2)通过成员函数重载运算符+
class Person {
public:
Person(int money) {
this->money = money;
}
int money;
Person operator+(Person& p) {
int tempMoney = this->money + p.money;
Person temp(tempMoney);
return temp;
}
};
int main() {
Person p1(100);
Person p2(50);
// Person p3 = p1.operator+(p2);
// 因为使用了运算符重载,那么上述代码可以简化成下面的
Person p3 = p1 + p2;
return 0;
}
3)区别
Person personAddPerson(Person& p) {
int tempMoney = this->money + p.money;
Person temp(tempMoney);
return temp;
}
Person operator+(Person& p) {
int tempMoney = this->money + p.money;
Person temp(tempMoney);
return temp;
}
我们可以看见实现两个对象相加来创建另一个对象的函数逻辑代码完全一样,唯一不同的就是函数名称. 后者使用了C++提供的关键字operator+,加号运算符重载,因此可以代码简化,实现Person p3 = p1 + p2;
4)通过全局函数重载运算符+
上述重载运算符的函数是成员函数,我们也可以通过全局函数来重载运算符,实现上述功能.
Person operator+(Person& p1, Person& p2) {
Person temp(p1.money + p2.money);
return temp;
}
int main() {
Person p1(100);
Person p2(50);
// Person p3 = operator+(p1, p2);
// 因为使用了运算符重载,那么上述代码可以简化成下面的
Person p3 = p1 + p2;
return 0;
}
推广:
算术运算符【*】、【/】、【%】 、【+】、【-】,均可以使用上述方法.
小结:
- 使用自定义数据类型的运算,需要用到运算符重载
- 运算符重载的本质就是根据自己的需求通过函数实现,然后可以简化成类似
Person p3 = p1 + p2;
- 实现运算符重载的函数,可以是成员函数,也可以是全局函数