天天看點

關于友元函數,運算符重載和類的類型轉換

一 關于運算符的重載:

運算符中有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。

繼續閱讀