运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型
对于内置数据类型:编译器知道如何进行运算
int a=10;
int b=10;
int c=a*b;
编译器不知道的情况
class Person {
public:
int ma;
int mb;
};
int main() {
Person p1;
p1.ma = 10;
p1.mb = 10;
Person p2;
p2.ma = 10;
p2.mb = 10;
Person p3 = p1 + p2;
}
所以上述代码是错误的。
思考:通过自己写一个成员函数,实现两个对象相加属性后返回新的对象
#include<iostream>
using namespace std;
class Person {
public:
int ma;
int mb;
Person PersonAddPerson(Person& p) {
Person temp;
temp.ma = this->ma + p.ma;
temp.mb = this->mb + p.mb;
return temp;
}
};
int main() {
Person p1;
p1.ma = 10;
p1.mb = 10;
Person p2;
p2.ma = 10;
p2.mb = 10;
Person temp=p2.PersonAddPerson(p1);
cout << temp.ma << endl;
}
编译器起了一个通用的名称
1.通过成员函数重载+
operater+
例子如下:
#include<iostream>
using namespace std;
class Person {
public:
int ma;
int mb;
Person operator+ (Person& p) {
Person temp;
temp.ma = this->ma + p.ma;
temp.mb = this->mb + p.mb;
return temp;
}
};
int main() {
Person p1;
p1.ma = 10;
p1.mb = 10;
Person p2;
p2.ma = 10;
p2.mb = 10;
Person temp=p2.operator+(p1);
Person p3 = p1 + p2;//上一行代码与此行代码一致
cout << "temp中ma=" << temp.ma << endl;
cout << "p3中ma=" << p3.ma << endl;
}
2.通过全局变量重载+
Person operat+(Person &p1,Person &p2){}
例子如下:
#include<iostream>
using namespace std;
class Person {
public:
int ma;
int mb;
Person operator+ (Person& p) {
Person temp;
temp.ma = this->ma + p.ma;
temp.mb = this->mb + p.mb;
return temp;
}
};//通过全局函数重载+
Person operator+(Person& p1, Person& p2) {
Person temp;
temp.ma = p1.ma + p2.ma;
temp.mb = p1.mb + p2.mb;
return temp;
}
int main() {
Person p1;
p1.ma = 10;
p1.mb = 10;
Person p2;
p2.ma = 10;
p2.mb = 10;
Person p3 = operator+(p1,p2);
cout << p3.ma << endl;
}