对于内置数据类型,编译器知道该如何运算。当出现自定义数据类型时,编译器就不知道该怎么运算。
运算符重载属于多态的一种。
写法:typedef operator+ (typedef & p)
class C//创建自定义数据类型
{
public:
C(){};//默认构造函数
C(int a, int b) :m_A(a), m_B(b){};
int m_A;
int m_B;
};
两者重载方式:
1.成员函数重载
class C
{
public:
C(){};//默认构造函数
C(int a, int b) :m_A(a), m_B(b){};
//加号运算符
C operator+(C& p)
{
C temp;
temp.m_A = this->m_A + p.m_A;
temp.m_B = this->m_B + p.m_B;
return temp;
}
int m_A;
int m_B;
};
成员函数测试案例:
#includeusing namespace std; class C { public: C(){};//默认构造函数 C(int a, int b) :m_A(a), m_B(b){}; //加号运算符 C operator+(C& p) { C temp; temp.m_A = this->m_A + p.m_A; temp.m_B = this->m_B + p.m_B; return temp; } int m_A; int m_B; }; void test01() { C p1(1, 1); C p2(1, 1); Person p3 = p1 + p2; cout << "p3的m_A:" << p3.m_A << endl; cout << "p3的m_B:" << p3.m_B << endl; } int main() { test01(); system("pause"); return 0; }
2.全局函数重载
class C//创建自定义数据类型
{
public:
C(){};//默认构造函数
C(int a, int b) :m_A(a), m_B(b){};
int m_A;
int m_B;
};
//利用全局函数进行+运算符重载
C operator+(C& p1, C& p2)
{
C temp;
temp.m_A = p1.m_A + p2.m_A;
temp.m_B = p1.m_B + p2.m_B;
return temp;
}
全局函数测试案例:
#includeusing namespace std; class C { public: C(){};//默认构造函数 C(int a, int b) :m_A(a), m_B(b){}; int m_A; int m_B; }; //利用全局函数进行+运算符重载 C operator+(C& p1, C& p2) { C temp; temp.m_A = p1.m_A + p2.m_A; temp.m_B = p1.m_B + p2.m_B; return temp; } void test01() { C p1(10, 10); C p2(10, 10); Person p3 = p1 + p2; cout << "p3的m_A:" << p3.m_A << endl; cout << "p3的m_B:" << p3.m_B << endl; } int main() { test01(); system("pause"); return 0; }
两者的区别:
成员函数+运算符重载的本质:C p3=p1.operator+(p2);
全局函数+运算符重载的本质:C p3=operator+(p1,p2);



