C++學習筆記 —— 運算符重載


運算符重載實質上是一個函數的重載。他提供了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();
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章