背景
C++原始的符合使用会有一些限制,例如"+"不能用于两个对象 相加,因此重载符号的目的是扩大原始符号的使用范围。
语法
符号重载本质是重新定义一个函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的
例子
"+" 重载用于两个对象的加号运算
在非成员函数重载符号
calc operator+(const calc& Calc1, const calc& Calc2)
疑问:为啥直接引用实参 和用const修饰符
#include<iostream>
using namespace std;
class calc
{
public:
int A;
int B;
calc(){}
calc(int a, int b)
{
A=a;
B = b;
}
int area()
{
return A * B;
}
};
calc operator+(const calc& Calc1, const calc& Calc2)
{
calc Calc3;
Calc3.A = Calc1.A + Calc2.A;
Calc3.B = Calc1.B + Calc2.B;
return Calc3;
}
int main()
{
calc Calc1 (1 ,2);
calc Calc2(1, 2);
calc Calc3 = Calc1 + Calc2;
cout << Calc3.area() << endl;
}
在成员函数重载符号
定义: calc operator+(calc& Calc1)
此时左值用this->访问当前的成员,而右值通过形参传递
#include<iostream>
using namespace std;
class calc
{
public:
int A;
int B;
calc(){}
calc(int a, int b)
{
A=a;
B = b;
}
int area()
{
return A * B;
}
calc operator+(calc& Calc1)
{
calc Calc3;
Calc3.A = this->A + Calc1.A;
Calc3.B = this->B + Calc1.B;
return Calc3;
}
};
int main()
{
calc Calc1 (1 ,2);
calc Calc2(1, 2);
calc Calc3 = Calc1 + Calc2;
cout << Calc3.area() << endl;
}