運算符重載實質上是一個函數的重載。他提供了c++的可擴展行,也是c++最吸引人的地方之一。
比如我們定一個了兩個string對象a 和b,我們之所以可以使用+讓他們連接起來是因爲string類重載了+號運算符
運算符重載有兩種方式
c++運算符重載之加號(+)
一、成員函數重載
二、友元函數重載
+號運算符重載問題
#include <iostream>
using namespace std;
class Person
{
public:
Person(int a, int b) : m_A(a), m_B(b) {}
int m_A;
int m_B;
};
int main()
{
Person p1(1,1);
Person p2(2,2);
//Person p3 = p1 + p2;// 編譯器並不知道如何進行運算
}
成員函數重載,接收一個參數
#include <iostream>
using namespace std;
class Person
{
public:
Person(int a, int b) : m_A(a), m_B(b) {}
//重載+號運算符
//返回值爲Person對象,傳入Person對象的引用
Person operator+(Person &p)
{
Person tmp(0, 0);
tmp.m_A = this->m_A + p.m_A;
tmp.m_B = this->m_B + p.m_B;
return tmp;
}
void getValue()
{
cout << m_A << " ," << m_B << endl;
}
private:
int m_A;
int m_B;
};
int main()
{
Person p1(1, 1);
Person p2(2, 2);
Person p3 = p1 + p2;// 由p1.operator+(p2) 轉化而來
p3.getValue();
}
友元函數重載:兩個參數
#include <iostream>
using namespace std;
class Person
{
public:
Person(int a, int b) : m_A(a), m_B(b) {}
//友元函數重載,放兩個參數
friend Person operator+(const Person &p1, const Person &p2);
void getValue()
{
cout << m_A << " ," << m_B << endl;
}
private:
int m_A;
int m_B;
};
//友元函數重載+運算符:需要兩個參數
Person operator+(const Person &p1, const Person &p2)
{
Person tmp(0, 0);
tmp.m_A = p1.m_A + p2.m_A;
tmp.m_B = p1.m_B + p2.m_B;
return tmp;
}
int main()
{
Person p1(1, 1);
Person p2(2, 2);
Person p3 = p1 + p2; // 由operator+(p1,p2) 轉化而來
p3.getValue();
}