網上太多有關運算符的重載了,但是寫的太過的詳細,不适合新手入門,特别是那什麼++和--的前增量後增量重載,一進制二進制運算符重載,特殊運算符,下标運算符,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;
};