過載運算與型別轉換

2021-08-14 23:59:56 字數 1097 閱讀 3077

1.基本概念:名字由關鍵字operator和其後要定義的運算符號共同組成。

對於乙個運算子來說,它或者是類的成員,或者至少含有乙個類型別的引數。

通常情況下,不應該過載逗號、取位址、邏輯與和邏輯或運算子。

2.當我們定義過載的運算子時,必須首先決定是將其宣告為類的成員函式還是宣告為乙個普通的非成員函式。一般來說

<1>賦值、下標()、呼叫(())和成員訪問箭頭運算子必須是成員。

<2>復合賦值運算子(+=、-=)一般來說應該是成員,但並不絕對。

<3>改變狀態的運算子與給定型別密切相關的運算子,如遞增、遞減和解引用運算子,通常應該是成員。

<3>具有對稱性的運算子(a+b和b+a無所謂)可能轉換任意一端的運算物件,例如:算術、相等性、關係和位運算子等,通常應該是普通的非成員函式。

注意:當把運算子定義成成員函式時,它的左側運算物件必須是運算子所屬類的乙個物件。而普通的非成員函式則沒有要求。

string s1 = "wang";

string s2 = "rong" + s1;//若+是string的成員,則發生錯誤。因為「rong」哪來的成員函式。(所以+是string的非成員函式)

3.函式呼叫運算子

如果類定義了呼叫運算子,則該類的物件就被稱為函式物件。之所以叫做函式物件,是因為該類物件的行為就和函式一樣。

class a

};int main()

型別轉換運算子是類的一種特殊成員函式,它負責將乙個類型別的值轉換成其它型別。格式如下:

operator type() const;

type表示某種型別。型別轉換運算子可以面向任意型別(除void)進行定義,只要該型別能作為函式的返回型別。因此,不允許轉換成陣列或函式型別,但允許轉換成指標或引用型別。

注意:型別轉換函式必須是類的成員函式,不能宣告返回型別,形參列表也必須為空。且型別轉換函式通常應該是const。

class a

operator int() const

private:

int val;

};int main()

c 過載運算與型別轉換

1.基礎概念 過載的運算子是具有特殊名字的函式 過載運算子函式,運算子函式。過載運算子 依次包含返回型別,函式名 operator 引數列表,函式體。只有過載的函式呼叫運算子operator 才能有預設實參。關於引數的數量,一般來說,一元運算子有乙個引數,二元有兩個,三元有三個 但是如果該運算子函式...

c primer要點 過載運算與型別轉換

1.與iostream相容的輸入輸出運算子必須是普通的非成員函式 下標運算子必須是成員函式 2.lambda表示式被編譯器翻譯成乙個未命名類的未命名物件,在這個類中含有乙個過載的函式呼叫運算子 lambda表示式通過引用捕獲變數時,將由程式負責確保lambda執行時引用的物件確實存在,因此編譯器可以...

C 知識 過載運算與型別轉換

最後,如果有理解不對的 地方,希望大家不吝賜教,謝謝!c 系列 前一章 拷貝控制 下一章 待續 當運算子作用於類型別的運算物件時,可以通過運算子過載重新定義該運算子的含義。明智地使用運算子過載能令我們的程式更易於編寫和閱讀。過載的運算子是具有特殊名字的函式 它們的名字由關鍵字operator和其後要...