運(yùn)算符重載是C++的重要組成部分,它可以讓程序更加的簡單易懂,簡單的運(yùn)算符使用可以使復(fù)雜函數(shù)的理解更直觀。
對于普通對象來說我們很自然的會(huì)頻繁使用算數(shù)運(yùn)算符讓他們參與計(jì)算,但是對于自定義類的對象來說,我們是無論如何也不能阻止寫出像下面的代碼一樣的程序來的。
例子如下:
C++ 代碼 class Test
{
//過程省略
}
int main()
{
Test a,c;
c=a+a;
}
當(dāng)然這樣的代碼是不能夠通過編譯的,c++對自定類的算術(shù)運(yùn)算部分保留給了程序員,這也是符合c++靈活特性的。
在c++中要想實(shí)現(xiàn)這樣的運(yùn)算就必須自定義運(yùn)算符重載函數(shù),讓它來完整具體工作。
在這里要提醒讀者的是,自定義類的運(yùn)算符重載函數(shù)也是函數(shù),你重載的一切運(yùn)算符不會(huì)因?yàn)槭悄阕约憾x的就改變其運(yùn)算的優(yōu)先級,自定義運(yùn)算符的運(yùn)算優(yōu)先級同樣遵循與內(nèi)部運(yùn)算符一樣的順序。
除此之外,c++也規(guī)定了一些運(yùn)算符不能夠自定義重載,例如.、::等等?!?BR> 上表是在C++中允許重載的運(yùn)算符總表
下面我們來學(xué)習(xí)如何重載運(yùn)算符,運(yùn)算符重載函數(shù)的形式是:
返回類型 operator 運(yùn)算符符號 (參數(shù)說明)
{
//函數(shù)體的內(nèi)部實(shí)現(xiàn)
}
運(yùn)算符重載函數(shù)的使用主要分為兩種形式,一種是作為類的友元函數(shù)進(jìn)行使用,另一種則是作為類的成員函數(shù)進(jìn)行使用。
下面我們先看一下作為類的友元函數(shù)使用的例子:
C++ 代碼
//程序作者:管寧
//站點(diǎn):www.cndev-lab.com
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請務(wù)必出處和作者
#include
using namespace std;
class Test
{
public:
Test(int a = 0)
{
Test::a = a;
}
friend Test operator +(Test&,Test&);
friend Test& operator ++(Test&);
public:
int a;
};
Test operator +(Test& temp1,Test& temp2)//+運(yùn)算符重載函數(shù)
{
//cout< Test result(temp1.a+temp2.a);
return result;
}
Test& operator ++(Test& temp)//++運(yùn)算符重載函數(shù)
{
temp.a++;
return temp;
}
int main()
{
Test a(100);
Test c=a+a;
cout< c++;
cout< system("pause");
}
在例子中,我們對于自定義類Test來說,重載了加運(yùn)算符與自動(dòng)遞增運(yùn)算符,重載的運(yùn)算符完成了同類型對象的加運(yùn)算和遞增運(yùn)算過程。
重載運(yùn)算符函數(shù)返回類型和形式參數(shù)也是根據(jù)需要量進(jìn)行調(diào)整的,下面我們來看一下修改后的加運(yùn)算符重載函數(shù)。
代碼如下:
C++ 代碼
//程序作者:管寧
//站點(diǎn):www.cndev-lab.com
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請務(wù)必出處和作者
#include
using namespace std;
class Test
{
public:
Test(int a = 0)
{
Test::a = a;
}
friend Test operator +(Test&,const int&);
public:
int a;
};
Test operator +(Test& temp1,const int& temp2)//+運(yùn)算符重載函數(shù)
{
Test result(temp1.a * temp2);
return result;
}
int main()
{
Test a(100);
Test c = a + 10;
cout< system("pause");
}
對于普通對象來說我們很自然的會(huì)頻繁使用算數(shù)運(yùn)算符讓他們參與計(jì)算,但是對于自定義類的對象來說,我們是無論如何也不能阻止寫出像下面的代碼一樣的程序來的。
例子如下:
C++ 代碼 class Test
{
//過程省略
}
int main()
{
Test a,c;
c=a+a;
}
當(dāng)然這樣的代碼是不能夠通過編譯的,c++對自定類的算術(shù)運(yùn)算部分保留給了程序員,這也是符合c++靈活特性的。
在c++中要想實(shí)現(xiàn)這樣的運(yùn)算就必須自定義運(yùn)算符重載函數(shù),讓它來完整具體工作。
在這里要提醒讀者的是,自定義類的運(yùn)算符重載函數(shù)也是函數(shù),你重載的一切運(yùn)算符不會(huì)因?yàn)槭悄阕约憾x的就改變其運(yùn)算的優(yōu)先級,自定義運(yùn)算符的運(yùn)算優(yōu)先級同樣遵循與內(nèi)部運(yùn)算符一樣的順序。
除此之外,c++也規(guī)定了一些運(yùn)算符不能夠自定義重載,例如.、::等等?!?BR> 上表是在C++中允許重載的運(yùn)算符總表
下面我們來學(xué)習(xí)如何重載運(yùn)算符,運(yùn)算符重載函數(shù)的形式是:
返回類型 operator 運(yùn)算符符號 (參數(shù)說明)
{
//函數(shù)體的內(nèi)部實(shí)現(xiàn)
}
運(yùn)算符重載函數(shù)的使用主要分為兩種形式,一種是作為類的友元函數(shù)進(jìn)行使用,另一種則是作為類的成員函數(shù)進(jìn)行使用。
下面我們先看一下作為類的友元函數(shù)使用的例子:
C++ 代碼
//程序作者:管寧
//站點(diǎn):www.cndev-lab.com
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請務(wù)必出處和作者
#include
using namespace std;
class Test
{
public:
Test(int a = 0)
{
Test::a = a;
}
friend Test operator +(Test&,Test&);
friend Test& operator ++(Test&);
public:
int a;
};
Test operator +(Test& temp1,Test& temp2)//+運(yùn)算符重載函數(shù)
{
//cout<
return result;
}
Test& operator ++(Test& temp)//++運(yùn)算符重載函數(shù)
{
temp.a++;
return temp;
}
int main()
{
Test a(100);
Test c=a+a;
cout<
cout<
}
在例子中,我們對于自定義類Test來說,重載了加運(yùn)算符與自動(dòng)遞增運(yùn)算符,重載的運(yùn)算符完成了同類型對象的加運(yùn)算和遞增運(yùn)算過程。
重載運(yùn)算符函數(shù)返回類型和形式參數(shù)也是根據(jù)需要量進(jìn)行調(diào)整的,下面我們來看一下修改后的加運(yùn)算符重載函數(shù)。
代碼如下:
C++ 代碼
//程序作者:管寧
//站點(diǎn):www.cndev-lab.com
//所有稿件均有版權(quán),如要轉(zhuǎn)載,請務(wù)必出處和作者
#include
using namespace std;
class Test
{
public:
Test(int a = 0)
{
Test::a = a;
}
friend Test operator +(Test&,const int&);
public:
int a;
};
Test operator +(Test& temp1,const int& temp2)//+運(yùn)算符重載函數(shù)
{
Test result(temp1.a * temp2);
return result;
}
int main()
{
Test a(100);
Test c = a + 10;
cout<
}

