1、 運(yùn)算符重載的概念
運(yùn)算符重載是C++的重要組成部分,它可以讓程序更加簡(jiǎn)單易懂,簡(jiǎn)單的運(yùn)算符可以使復(fù)雜函數(shù)的理解更直觀。對(duì)于普通對(duì)象來說可以使用算術(shù)運(yùn)算符讓它們參與計(jì)算,C++也允許為類的對(duì)象構(gòu)造運(yùn)算符來實(shí)現(xiàn)單目或雙目運(yùn)輸,這個(gè)特性就叫運(yùn)算符的重載。其實(shí),任何使用運(yùn)算符完成的功能,使用普通的函數(shù)也能夠完成。運(yùn)算符的重載主要存在兩種形式,一種是作為類的友元函數(shù)進(jìn)行使用,另一種則是作為類的成員函數(shù)進(jìn)行使用。運(yùn)算符的重載的形式為:
返回類型 operator 運(yùn)算符符號(hào)(參數(shù)說明)


{ //函數(shù)體的內(nèi)部實(shí)現(xiàn)

}
2、 運(yùn)算符的運(yùn)算規(guī)則
①運(yùn)算符重載函數(shù)也是函數(shù),重載的運(yùn)算符不會(huì)改變運(yùn)算符的優(yōu)先級(jí)、結(jié)合型和參數(shù)的個(gè)數(shù)。
②重載運(yùn)算符不能違反語(yǔ)言的語(yǔ)法規(guī)則。
③賦值運(yùn)算符除外,重載運(yùn)算符可由派生類繼承下去。
④重載運(yùn)算符不能使用默認(rèn)參數(shù)。
⑤運(yùn)算符=、()、[]和->可作為類成員運(yùn)算符,不能作為友元運(yùn)算符。
⑥運(yùn)算符“.”、“::”、“?:”不能重載。
⑦友元運(yùn)算符的參數(shù)規(guī)則與類成員運(yùn)算符的參數(shù)規(guī)則不同,一員運(yùn)算符必須顯示地聲明一個(gè)參數(shù),二員運(yùn)算符必須顯示地聲明兩個(gè)參數(shù)。類成員運(yùn)算符重載時(shí),參數(shù)中隱含了一個(gè)this指針。
3、 實(shí)例代碼
1)下面是重載函數(shù)作為友元函數(shù)的形式
#include <iostream>
using std::cout;
using std::endl;

/**//*********************************************************/

/**//* 聲明復(fù)數(shù)類
/*********************************************************/
class Complex


{
public:
//Attribute
int x;
int y;
//Operator

void SetX(int a)
{x=a;}

void SetY(int b)
{y=b;}

friend Complex operator +(Complex &, Complex &);
friend Complex operator -(Complex &, Complex &);
friend Complex operator *(Complex &, Complex &);
friend Complex operator /(Complex &, Complex &);

friend Complex operator ++(Complex &);//前置方式
friend Complex operator ++(Complex &, int);//后置方式
};
// "+"重載運(yùn)算符
Complex operator +(Complex& temp1,Complex& temp2 )


{
Complex ret;
ret.x=temp1.x+temp2.x;
ret.y=temp1.y+temp2.y;
return ret;
}
// "-"重載運(yùn)算符
Complex operator -(Complex& temp1,Complex& temp2 )


{
Complex ret;
ret.x=temp1.x-temp2.x;
ret.y=temp1.y-temp2.y;
return ret;
}
// "*"重載運(yùn)算符
Complex operator *(Complex& temp1,Complex& temp2 )


{
Complex ret;
ret.x=temp1.x*temp2.x;
ret.y=temp1.y*temp2.y;
return ret;
}
// "/"重載運(yùn)算符
Complex operator /(Complex& temp1,Complex& temp2 )


{
Complex ret;
ret.x=temp1.x/temp2.x;
ret.y=temp1.y/temp2.y;
return ret;
}
// "++"前置運(yùn)算符
Complex operator ++(Complex& temp1)


{
temp1.x=temp1.x+1;
temp1.y=temp1.y+1;
return temp1;
}
// "++"后置運(yùn)算符
Complex operator ++(Complex& temp1,int)


{
temp1.x=temp1.x++;
temp1.y=temp1.y++;
return temp1;
}
//主函數(shù)()
int main()


{
Complex Complex1;
Complex Complex2;
Complex Ret;

Complex1.SetX(30);
Complex1.SetY(40);

Complex2.SetX(10);
Complex2.SetY(20);

cout<<"重載加法運(yùn)算"<<endl;
Ret=Complex1+Complex2;
cout<<"Ret.x="<<Ret.x<<endl;
cout<<"Ret.y="<<Ret.y<<endl;

cout<<"重載減法運(yùn)算"<<endl;
Ret=Complex1-Complex2;
cout<<"Ret.x="<<Ret.x<<endl;
cout<<"Ret.y="<<Ret.y<<endl;

cout<<"重載乘法運(yùn)算"<<endl;
Ret=Complex1*Complex2;
cout<<"Ret.x="<<Ret.x<<endl;
cout<<"Ret.y="<<Ret.y<<endl;

cout<<"重載除法運(yùn)算"<<endl;
Ret=Complex1/Complex2;
cout<<"Ret.x="<<Ret.x<<endl;
cout<<"Ret.y="<<Ret.y<<endl;

cout<<"前置++運(yùn)算"<<endl;
Ret=++Complex1;
cout<<"Ret.x="<<Ret.x<<endl;
cout<<"Ret.y="<<Ret.y<<endl;

cout<<"后置++運(yùn)算"<<endl;
Ret=Complex1++;
cout<<"Ret.x="<<Ret.x<<endl;
cout<<"Ret.y="<<Ret.y<<endl;
return 0;
}
2)下面是重載函數(shù)作為成員函數(shù)的實(shí)例代碼:
#include <iostream>
using std::cout;
using std::endl;

/**//*********************************************************/

/**//* 聲明復(fù)數(shù)類
/*********************************************************/
class Complex


{
public:
//Attribute
int x;
int y;
//Operator

void SetX(int a)
{x=a;}

void SetY(int b)
{y=b;}
//成員函數(shù)
Complex operator +(Complex &);
Complex operator -(Complex &);
Complex operator *(Complex &);
Complex operator /(Complex &);
Complex& operator ++();//前置方式
Complex& operator ++(int);//后置方式
};
// "+"重載運(yùn)算符
Complex Complex::operator +(Complex& temp1)


{
Complex ret;
ret.x=x+temp1.x;
ret.y=y+temp1.y;
return ret;
}
// "-"重載運(yùn)算符
Complex Complex::operator -(Complex& temp1)


{
Complex ret;
ret.x=x-temp1.x;
ret.y=y-temp1.y;
return ret;
}
// "*"重載運(yùn)算符
Complex Complex::operator *(Complex& temp1)


{
Complex ret;
ret.x=x*temp1.x;
ret.y=y*temp1.y;
return ret;
}
// "/"重載運(yùn)算符
Complex Complex::operator /(Complex& temp1)


{
Complex ret;
ret.x=x/temp1.x;
ret.y=y/temp1.y;
return ret;
}
// "++"前置運(yùn)算符
Complex& Complex::operator ++()


{
x=x+1;
y=y+1;
return *this;
}
// "++"后置運(yùn)算符
Complex& Complex::operator ++(int)


{
x=x++;
y=y++;
return *this;
}
//主函數(shù)()
int main()


{
Complex Complex1;
Complex Complex2;
Complex Ret;

Complex1.SetX(30);
Complex1.SetY(40);

Complex2.SetX(10);
Complex2.SetY(20);

cout<<"重載加法運(yùn)算"<<endl;
Ret=Complex1+Complex2;
cout<<"Ret.x="<<Ret.x<<endl;
cout<<"Ret.y="<<Ret.y<<endl;

cout<<"重載減法運(yùn)算"<<endl;
Ret=Complex1-Complex2;
cout<<"Ret.x="<<Ret.x<<endl;
cout<<"Ret.y="<<Ret.y<<endl;

cout<<"重載乘法運(yùn)算"<<endl;
Ret=Complex1*Complex2;
cout<<"Ret.x="<<Ret.x<<endl;
cout<<"Ret.y="<<Ret.y<<endl;

cout<<"重載除法運(yùn)算"<<endl;
Ret=Complex1/Complex2;
cout<<"Ret.x="<<Ret.x<<endl;
cout<<"Ret.y="<<Ret.y<<endl;

cout<<"前置++運(yùn)算"<<endl;
Ret=++Complex1;
cout<<"Ret.x="<<Ret.x<<endl;
cout<<"Ret.y="<<Ret.y<<endl;

cout<<"后置++運(yùn)算"<<endl;
Ret=Complex2++;
cout<<"Ret.x="<<Ret.x<<endl;
cout<<"Ret.y="<<Ret.y<<endl;
return 0;
}
輸出結(jié)果如下圖所示:
想要獲得更多內(nèi)容,可點(diǎn)擊:《Visual C++代碼參考與技巧大全》學(xué)習(xí)筆記——索引隨筆