加号运算符重载
作用:实现两个自定义数据类型相加的运算
1.成员函数实现 + 号运算符重载
classPerson
{
public:
Person() {};
Person(inta, intb)
{
this->m_A=a;
this->m_B=b;
}
//1.成员函数实现 + 号运算符重载
Personoperator+(constPerson&p) {
Persontemp;
temp.m_A=this->m_A+p.m_A;
temp.m_B=this->m_B+p.m_B;
returntemp;
}
public:
intm_A;
intm_B;
};
voidtest() {
Personp1(10, 10);
Personp2(20, 20);
//1.成员函数方式
Personp3=p2+p1; //相当于 p2.operaor+(p1)
cout<<"mA:"<<p3.m_A<<" mB:"<<p3.m_B<<endl;
}
intmain() {
test();
system("pause");
return0;
}
2.全局函数实现 + 号运算符重载
classPerson
{
public:
Person() {};
Person(inta, intb)
{
this->m_A=a;
this->m_B=b;
}
public:
intm_A;
intm_B;
};
//2.全局函数实现 + 号运算符重载
Personoperator+(constPerson&p1, constPerson&p2) {
Persontemp;
temp.m_A=p1.m_A+p2.m_A;
temp.m_B=p1.m_B+p2.m_B;
returntemp;
}
voidtest() {
Personp1(10, 10);
Personp2(20, 20);
//2.全局函数方式
Personp3=p2+p1; //相当于 operaor+(p1,p2)
cout<<"mA:"<<p3.m_A<<" mB:"<<p3.m_B<<endl;
}
intmain() {
test();
system("pause");
return0;
}
3.运算符重载 可以发生函数重载
classPerson
{
public:
Person() {};
Person(inta, intb)
{
this->m_A=a;
this->m_B=b;
}
public:
intm_A;
intm_B;
};
//3.运算符重载 可以发生函数重载
Personoperator+(constPerson&p2, intval) //注意全局函数的运算重载的函数名是编译器给的。
{
Persontemp;
temp.m_A=p2.m_A+val;
temp.m_B=p2.m_B+val;
returntemp;
}
voidtest() {
Personp1(10, 10);
Personp2(20, 20);
//3.运算符重载也可以发生函数重载,如下person + int
Personp4=p3+10; //相当于 operator+(p3,10)
cout<<"mA:"<<p4.m_A<<" mB:"<<p4.m_B<<endl;
}
intmain() {
test();
system("pause");
return0;
}
总结1:对于内置的数据类型的表达式的的运算符是不可能改变的,即1+1=2不可变,不会为3.
总结2:不要滥用运算符重载,即你写的函数名是加法,可是函数的实现是减法,可以运行但是这叫滥用。