第14章 過載運算與型別轉換
1. 當乙個過載的運算子時成員函式時,this繫結到左側運算物件,成員運算子函式顯式地參數量比運算物件地數量少乙個。
2.我們把運算子定義為成員函式時,它地左側運算物件必須是所屬類地物件。
3.具有對稱性的運算子,一般定義為普通的非成員函式。比如算術和關係運算子。
4.輸入輸出運算子必須是非成員函式。
5.類如果同時定義了算術運算子和相關的復合賦值運算子,則應用復合賦值來實現算數運算子。
6.賦值運算子必須是成員函式。
7.下標運算子必須是成員函式,同時需要定義常量和非常量版本。
8.遞增和遞減運算子應該是成員函式,並各自有前置和後置版本。
9.後置運算子為了和前置區分,接受乙個額外的不被使用的int形參。且返回物件的原值,不是引用。
10.函式呼叫運算子,可以像函式一樣呼叫物件,必須是成員函式。把這種物件稱之為函式物件。
11.函式物件通常作為泛型演算法的實參。
12.lambda是函式物件。lambda表示式產生的類不含預設建構函式等。
13.在演算法中使用標準庫函式物件。sort的降序排列:sort(vec,begin(), vec.end(), greater());
14.無關指標的比較產生未定義行為。可以用標準庫函式物件來實現目的。less(),關聯容器map,set等用less對元素排序。
15.標準庫function型別,解決相同呼叫形式的不同型別可呼叫物件儲存問題。function>;
16.型別轉換運算子負責把類型別轉換為其他型別,是成員函式,無返回型別,形參列表為空,函式是const。
17.對類而言,定義向bool的型別轉換是比較普遍的。
18.為了防止異常情況產生,定義顯式的型別轉換運算子,explicit.必須顯式地強制型別轉換才可以用。但是用作條件時,不需要。
19.while(cin>>value),其中cin>>value返回cin,cin被istream operator bool型別轉換函式隱式地轉換。
20.表示式中運算子地候選函式集既包括成員函式也包括非成員函式。
21.二義性錯誤。對乙個類既提供了轉換目標是算術型別地型別轉換,也提供了過載地運算子,則會有過載運算子和內建運算子二義性的問題。
22.只接受乙個實參的非顯式建構函式定義了從實參型別到類型別的型別轉換。非顯式地型別轉換運算子定義了從類型別到其他型別地轉換。
c primer要點 過載運算與型別轉換
1.與iostream相容的輸入輸出運算子必須是普通的非成員函式 下標運算子必須是成員函式 2.lambda表示式被編譯器翻譯成乙個未命名類的未命名物件,在這個類中含有乙個過載的函式呼叫運算子 lambda表示式通過引用捕獲變數時,將由程式負責確保lambda執行時引用的物件確實存在,因此編譯器可以...
C 之過載運算與型別轉換
賦值運算子 算術和關係運算子 下標運算子 遞增和遞減運算子 過載 型別轉換與運算子 過載的運算子是具有特殊名字的函式 它們的名字由關鍵字operator和其後要定義的運算符號共同組成。和其他函式一樣,過載的運算子也包含返回型別 引數列表以及函式體。對於乙個運算子函式來說,它或者是類的成員,或者至少含...
過載運算與型別轉換
1.基本概念 名字由關鍵字operator和其後要定義的運算符號共同組成。對於乙個運算子來說,它或者是類的成員,或者至少含有乙個類型別的引數。通常情況下,不應該過載逗號 取位址 邏輯與和邏輯或運算子。2.當我們定義過載的運算子時,必須首先決定是將其宣告為類的成員函式還是宣告為乙個普通的非成員函式。一...