今天學(xué)習(xí)的是運(yùn)算符的重載:
運(yùn)算符重載:
使用運(yùn)算符重載的一般格式為:
類型名 ?operator ? 運(yùn)算符(形參表)
{ ?函數(shù)體 ? }
其中operator是關(guān)鍵字,類型名為重載運(yùn)算符的返回類型,即運(yùn)算結(jié)果返回類型。
例:

下面是運(yùn)算符重載的友元函數(shù):
class aa{ ? //運(yùn)算符重載的友元形式
float a;? ? float b;
public:
float &aaa(){return(a);}
float &bbb(){return(b);}
friend aa operator +(aa&,aa&);};
aa operator +(aa & a,aa& b)
{aa c;
c.a=a.a+b.a;
c.b=a.b+b.b;
return(c);? }
void main()
{? aa a,b;
a.aaa()=1; a.bbb()=2;
b.aaa()=3; b.bbb()=4;
aa c=a+b;//等價(jià)aa c=operator +(a,b);
cout<<c.aaa()<<endl<<c.bbb();}
aa c=a+b;//等價(jià)aa c=operator +(a,b);
aa c=a+b;//等價(jià)aa c=operator +(a,b);
aa c=a+b;//等價(jià)aa c=operator +(a,b);
aa operator +(aa& a,aa& b)//不提倡改變運(yùn)算符的含義
運(yùn)算符重載時(shí)參數(shù)個(gè)數(shù)不可以超過原來數(shù)目
運(yùn)算符重載時(shí)參數(shù)類型不能全為基本類型,至少有一個(gè)操作對(duì)象是自定義類型
在C++中幾乎所有的運(yùn)算符(除“.”(成員選擇符)、“.*”(成員對(duì)象選擇符)、“->*(成員指針選擇符)”、“::”、“?:”、“sizeof”外)都可以被重載。只能重載C++中已有的運(yùn)算符,不允許創(chuàng)建新的運(yùn)算符.
賦值運(yùn)算符重載
拷貝構(gòu)造函數(shù)和賦值操作符都是用來拷貝一個(gè)類的對(duì)象給另一個(gè)同類型的對(duì)象。
void fn(A a)
{ A na=a;? //拷貝構(gòu)造函數(shù):將一個(gè)對(duì)象拷貝到另一個(gè)新對(duì)象
A b;
b=a;}//賦值運(yùn)算符:將一個(gè)對(duì)象為另一個(gè)已經(jīng)存在的對(duì)象賦值
編譯器提供默認(rèn)的拷貝構(gòu)造函數(shù)和賦值運(yùn)算符的運(yùn)作機(jī)制。
就是將對(duì)象中的每個(gè)數(shù)據(jù)成員拷貝到目標(biāo)對(duì)象相應(yīng)的數(shù)據(jù)成員中。
若類的數(shù)據(jù)成員中有指向動(dòng)態(tài)分配空間的指針,通常定義拷貝構(gòu)造函數(shù),此時(shí),應(yīng)重載賦值運(yùn)算符。
類型轉(zhuǎn)換運(yùn)算符聲明的形式:
operator 類型名();
沒有參數(shù),沒有返回類型,(其返回類型由函數(shù)名字指定)但是函數(shù)體中必須包含return語句。
只能作為成員函數(shù)。