天天看點

c++primer第十四章重載運算與類型轉換小結-14

第十四章----重載運算與類型轉換

1、重載運算符是特殊的函數,它們的名字由operator和其後要重載的運算符号共同組成。 因為重載運算符時函數, 是以它包含傳回值、參數清單和函數體。對于重載運算符是成員函數時, 它的第一個運算對象被隐式的綁定到this指針上,是以,成員函數的重載運算符的顯示參數數量比運算符的運算對象少一個。對一個運算符函數來說, 要麼它是一個類的成員函數, 或者它的參數至少包含一個類類型。

2、某些運算符不應該被重載:對于邏輯與&&、邏輯或 || 和逗号運算符來說,重載它們會無法保留下來它們的運算對象的求值順序。 而且對于&& 和 || 來說,它們具有的短路求值屬性也無法保留。對于取位址運算符,它又特定的内置含義,它也不該被重載。在C++中隻有作用域操作符(::)、條件操作符(?:)不能重載。

3、重載運算符應該和内置類型一樣的含義:如果類執行IO操作,則定義移位運算符使其與内置類的IO 一緻。一般定義了相等性運算符==,那麼也應該定義!= 運算符。一個類定義了一個比較運算符,那麼它也應該定義其他比較運算符。重載運算符的傳回類型應該和内置版本的傳回類型一緻。

4、指派(=)、 下标([])、調用(())和成員通路箭頭運算符必須定義為成員函數,

複合指派運算符一般定義為成員函數,但不是必須的

改變對象狀态的運算符或者與給定類型密切相關的運算符,如遞增、遞減和解引用運算符,一般定義為成員函數具有對稱性的運算符可能轉換任意一端的運算對象,例如算術、相等性、關系和位運算符等,通常應該為非成員函數。

5、輸出運算符的第一個形參是一個非常量的ostream對象的引用,第二個形參一般是一個常量的引用,因為輸出運算符不會改變參數的值

6、類型轉換操作符重載:

類設計者可以設計類型轉換操作符重載,用以将類類型轉換為需要轉換到的類型,該轉換過程為隐式類型轉換。編譯器隻能夠從類

類型轉換到相應類型一次,如果需要多次轉換則隻能跟标準庫轉換,不能連續多次類類型轉換,即不能遞歸轉換。标準轉換可以放

在類類型轉換之前。可以利用類類型轉換操作符重載與構造函數實作類類型與内置類型的互相轉換。

7.不能重載的運算符有四個,   ::  .*    .   ? .  ,有一些不應該被重載。重載運算符主要為類準備的。