operator過載整理

2021-06-18 21:38:50 字數 1634 閱讀 7734

過載的操作符在類體中被宣告,宣告方式如同普通成員函式一樣,只不過他的名字包含關鍵字operator,以及緊跟其後的乙個c++預定義的操作符。

可以用如下的方式來宣告乙個預定義的==操作符:

class person

inline bool operator ==(const person &ps) const;

};實現方式如下:

inline bool person::operator==(const person &ps) const

呼叫方式如下:

#include

using namespace std;

int main()

這裡,因為operator ==是class person的乙個成員函式,所以物件p1,p2都可以呼叫該函式,上面的if語句中,相當於p1呼叫函式==,把p2作為該函式的乙個引數傳遞給該函式,從而實現了兩個物件的比較。

考慮如下的if語句:

if(10==p1) cout<

答案是不會的,因為只有左運算元是該類型別的物件的時,才會考慮作為類成員過載操作符。因為10不是person型別的物件,所以,不能呼叫classperson的操作符==。

考慮如下if語句:

if(person(10)==person(11))

cout<

拷貝建構函式和賦值運算子

本節內容較深,初學者請跳過。「拷貝建構函式」和「賦值運算子」都是將物件的值複製乙份然後傳給另一物件。這二個功能也是類本身就具有的,但有很多場合原封不動地複製給另外乙個物件時反而會出錯,例如在成員函式中有動態分配記憶體,或者引數指標指向外部某一位址時,就有可能出錯。

要避免這些錯誤,我們可以過載「=」運算子以及拷貝建構函式,將出錯的因素排除。下例中為了演示,故意將賦值運算子過載函式中不複製「姓名」,而拷貝建構函式中固定「年齡」。

#include#includeusing namespacestd;classstuff 

string getname()intgetage()

stuff&operator=(stuff& x); //賦值運算子過載

stuff(stuff& x):name(x.name),age(20) //拷貝建構函式過載

};stuff& stuff::operator=(stuff& x)

intmain ( )

當需要將當前類的例項直接賦值給其它型別的變數時自動轉換型別,這其實還是運算子過載。當需要其它型別直接賦值給當前類的例項時,只要增加建構函式就行。

#include#includeusing namespacestd;classstuff 

string getname()intgetage()operatorint()operatorstring()

};intmain ( )

operator 過載函式

今天在看書時發現了乙個有意思的地方 class textblock char operator size t position private string text int main 對於 類的運算子過載函式 char operator size t position 其返回值是類成員text的引...

正確的過載operator

下面的段落中,我將介紹為使用者定義型別選擇正確的過載operator 的一般性的策略。第一步 選擇成員函式或是非成員函式?我們可以象使用類的成員函式一樣使用 或是 等二進位制操作符,例如 class string 然而,這種實現方式值得懷疑。在這種情況下,作為內建操作符的副本,過載後的操作符違背了內...

C 過載operator的示例

include include using namespace std class test test const int a v a test const test t1 v t1.v 以下過載小於號 比較兩個物件的大小 bool operator const test t1 const 比較物件...