天天看點

【C++基礎之六】運算符的重載

網上太多有關運算符的重載了,但是寫的太過的詳細,不适合新手入門,特别是那什麼++和--的前增量後增量重載,一進制二進制運算符重載,特殊運算符,下标運算符,new和delete,甚至是指針運算符的重載,吓退了多少小夥伴啊。。我這裡就寫個最基礎的,其實原理和寫法都差不多,舉一反三,多動手才能寫好代碼。

1.概述

什麼是運算符重載?

如果你想讓1+1=0,那麼就需要讓+号不再是相加的意思,而是讓它代表相減的意思。是以很明了,運算符的重載實質上就是函數的重載,在這個過程中,編譯器幫你完成了下面三個動作:

(1)将指定的運算表達式轉化為對運算符函數的調用

(2)将運算對象轉化為運算符函數的實參

(3)根據實參的類型來确定調用函數

2.實作

運算符的重載實作有兩種形式:

(1)重載為類的成員函數

<函數類型> operator <運算符>(<形參表>)
{
<函數體>;
}
           

(2)重載為類的友元函數

friend <函數類型> operator <運算符>(<形參表>)
{
<函數體>;
}
           

3.示例

(1)重載為類的成員函數

Test.h

class Test
{
public:
	Test(void):a(0){};
	~Test(void){};

	Test(int _a):a(_a){};

	Test operator + (Test& _test)//重載操作符,傳回該類的一個執行個體
	{
		int new_a=a+_test.a;
		Test new_Test(new_a);
		return new_Test;
	};

	int a;
};
           

main.cpp

int _tmain(int argc, _TCHAR* argv[])
{
	Test t1(1),t2(2),t3;
	t3=t1+t2;
	std::cout<<t3.a;
	return 0;
}
           

(2)重載為類的友元函數

main.cpp同上,Test.cpp如下

class Test
{
public:
	Test(void):a(0){};
	~Test(void){};

	Test(int _a):a(_a){};

	friend Test operator + (Test& _test1,Test& _test2)//重載為友元函數,因為友元函數不是類成員,是以需要傳入2個參數
	{
		int new_a=_test1.a+_test2.a;
		Test new_Test(new_a);
		return new_Test;
	};

	int a;
};
           

繼續閱讀