一 關于運算符的重載:
運算符中有10種是不可重載的:
sizeof static_cast<type>
. dynamic_cast<type>
.* const_cast<type>
:: typeid
?= reinterpret_cast<type>
有4種是隻可以在類中重載的:
() 【】 = ->
重載的格式:
關于<<的重載:
在重載<<運算符時有不同,需要傳回輸出流的引用:
二 關于友元函數:
友元函數聲明在類中,加上關鍵字friend即可,但在實作時不需要加上friend也不需要加上類
作用域,因為友元函數并不屬于類成員。
而之前的關于輸出流重載的例子一般都是采用友元的方式來實作的。
ps:在寫類及其實作的函數時需要使用命名空間這樣,在編寫一個較為大型的項目時會有優勢。
三 關于類的類型轉換:
類的類型轉換分為兩種,其中第一種為強制類型轉換,第二種為自動轉換。
在轉換方向上也可分為由一般類型轉換為類,由類轉換為一般類型。
(1)可以看出,由一般類型轉換為類是通過構造函數進行實作的一個方法,但這會帶來隐式轉換的問題,是以一般在定義時需要加上explicit關鍵字進行限定,防止隐式轉換的出現。
(2)轉換為一般函數的方式是通過定義以一般類型名為名的函數,它屬于類的成員。
同時也需要注意,它的傳回類型不再需要指定,可以直接由函數名得到。
operator int(); 這種方式也會帶來隐式轉換的問題,但在c++98中沒法使用explicit關鍵字進行
處理,隻有在c++11中可以使用關鍵字explicit。
四 關于類的強制類型轉換:
static_cast<type>(value):
這個強制轉換的方式同c語言的強制轉換方式相同
dynamic_cast<type>(value):
此強制轉換方式為動态的強制轉換,會檢查其參數的類型,
如value不是所選type的相同類或其子類則會傳回null。