C 操作符過載 的學習

2021-07-26 05:45:29 字數 3228 閱讀 3103

操作符過載

過載操作符是具有特殊函式名的函式,關鍵字operator後面接需要定義的操作符符號。

操作符過載也是乙個函式,具有返回值和形參表,它的形引數目與操作符的運算元目相同。

表示形式:

返回型別  operator 操作符(引數列表);

不能被過載的操作符:

.(成員選擇符)、.*(成員物件選擇符)、::(域解析操作符)、?:(條件操作符)

注意:1.不能通過連線其他符號來建立新的操作符;

2.過載操作符必須有乙個類型別或者列舉型別的運算元;

int operator +(const int _inum1 ,const int _inum2 ) //報錯,operator必須至少乙個類型別的形參

enum test

;int operator+(const test t1,consttest t2)   //正確

int main()

3.用於內建型別的操作符,其含義不能改變,

4.不再具備短求值特性

過載操作符不能保證操作符的求值順序,在過載&&和||中,對每個運算元都要進行求值,而且對操作符的          求值順序不能規定,因此,過載&&和||和逗號操作符不是很好的做法。

5.作為類成員的過載函式,其形參看起來比運算元數目少一,

6.一般將算術操作符定義為非成員函式,將賦值運算子定義成成員函式,

7.操作符定義為非類的成員函式時,一般定義為類的友元,

8.==和!=操作符一般要成對過載,

9.下標操作符:乙個非const成員並返回引用,乙個是const成員並返回引用

10.解引用操作符*和->操作符,不顯示任何操作符,

11. 自增自減操作符

前置式++/--必須返回被增量或則減量的引用

字尾式++/--必須返回舊值,並且應該是值返回而不是引用返回

12.輸入操作符》和輸出操作符》必須定義為類的友元函式,

以下為操作符的過載舉例

複數類:

class complex

complex(constcomplex & c)

~complex()

{}private:

double_real;

double_image;

};符號=:

complex & operator=(constcomplex &c)   //必須有返回值:支援連續賦值

return*this;

}符號+:

complex operator+(const complex&c)

符號-:

complex operator-(const complex&c)

符號*:

complex operator*(const complex&c)

符號/:

complexoperator/(const complex &c)

}符號+=:

complex& operator+=(const complex &c)

符號-=:

complex & operator-=(constcomplex &c)

符號*=:

complex & operator*=(constcomplex &c)

符號/=:

complex & operator/=(constcomplex &c)

}符號==、!=、>=、<=:

bool operator==(const complex& c)  

else

returnfalse;*/

return ((_real == c._real) &&(_image == c._image));

}booloperator!=(const complex & c)    

booloperator>(const complex &c)

booloperator<(const complex &c)

booloperator>=(const complex &c)

booloperator<=(const complex &c)

符號前置++,後置++,前置--,後置--,輸出運算子

class test

test(consttest &t)

test& operator++()  //前置加加

testoperator++(int)//後置加加

test& operator--()  //前置減減

testoperator--(int)//後置減減

//類的成員函式

ostream& operator<<(ostream &_cout)  <<(cout) 

~test()

{}private:

int_a;

};//不是類的成員函式

ostream & operator<<(ostream&_cout,const test &t)   //呼叫形式:cout<

int main()

友元什麼是友元函式?

友元函式可以直接訪問類的私有成員,它是定義在類外部的普通函式,不屬於任何類,但需要在類中申            明,申明是需要加上friend關鍵字。

友元函式說明:

1.友元函式可訪問類的私有成員,但不是類的成員函式;

2.友元函式不能用const修飾;

3.友元函式可以在類定義的任何地方宣告,不受類訪問限定符限制;

4.乙個函式可以是多個類的友元函式;

5.友元函式的呼叫與普通函式的呼叫和原理相同。

class time

friendvoid display(time &t);

private:

int_hour;

int_minute;

int_second;

};void display(time &t)

int main()

上例中display函式使用類的資料成員時,必須指定要訪問的物件,因為display函式是time類的友元函式,而不是成員函式,不能預設引用time類的資料成員。

friend函式不僅可以是一般函式,還可以是另乙個類的成員函式;

友元類友元類的所有成員函式都可以是另乙個類的友元函式,都可以訪問另乙個類中的非公有成員;

友元的優缺點

優點:提高了程式執行效率

缺點:破壞了類的封裝性和隱藏性        

注意  :

友元關係不能繼承

友元關係是單向的,不具有交換性

友元關係不能傳遞

C 操作符過載

1.作為成員過載 class myclass public myclass operator const myclass d cons friend myclass operator const myclass a1,const myclass a2 關於返回值型別的討論 呼叫者堆疊裡返回乙個物件效...

C 過載操作符

過載操作符 一 過載操作符的定義 1.過載操作符的結構 返回型別 operator 需要過載的操作符 形參列表 注意 形引數目應和運算元數目相同。2.過載操作符的幾條注意事項 1 過載的操作符名不能通過連線其他合法符號來建立任何新的操作符。如 2 過載操作符必須具備至少乙個類型別或列舉型別的運算元。...

c 操作符過載

過載操作符 一 限制 1 不能增加新的操作符 2 有些操作符不能過載,如.物件中的訪問成員 作用域解析操作符 sizeof 三元操作符 3 不能改變操作符的元數,元數是指與操作符相關的引數或運算元個數。比如一元操作符 只能應用於乙個操作符 4 不能改變操作符的優先順序 5 不能重新定義內建型別的操作...