- 轉換函數
1、顯示轉換
2、隱式轉換
3、內置類型 — 基礎的類型 int char ;內置運算符 = + -
類作爲C++中的自定義類型,可以實現類型的轉換。當需要由某種類型轉換爲自定義類型時,只需要在自定義類型類中創建一個要由某種類型轉換的構造函數,即:
Class A
{
A(int x)
{
}
};
就可以實現由 int類型的變量轉換爲A類型的對象
-
explicit關鍵字
在C++中,explicit關鍵字用來修飾類的構造函數,被修飾的構造函數的類,不能發生相應的隱式類型轉換,即explicit只能修飾單個參數的構造函數
給單參數的構造函數使用explicit關鍵字,阻止可能產生的隱式轉換:由成員變量類型轉換爲類類型 -
類轉換 – 將一個類的對象轉換成娘一個類型的數據
- 類型轉換函數:type conversion function
- 實質就是運算符重載,只是重載的運算符不是內置的運算符,而是類名這個特殊的自定義類型
-
隱式類型轉換 — 將 1 使用一個參數的,參數類型爲int 的構造函數,去進行隱式轉換爲 point 型
使用關鍵字聲明 函數不可作爲隱式轉換
-
強制類型轉換 — 轉換函數
除了上面所說的隱式類型轉換外,需要類型轉換時,C++提供類型轉換函數將一個類的對象轉換成另一類型的數據。轉換函數的實質就是運算符重載,只是重載的運算符不是內置的運算符而是類名這個特殊的自定義類型
語法形式:
operator 類型名( )
{
實現轉換的語句
}
1、 將要轉換的類型爲函數名 int operator int() , 有 this指針,不需要參數,可以省略返回值類型跟函數名一樣;
2、在無重載 << 輸出運算符時,輸出cout <<p1<<endl,把p1轉換成int型輸出;在有重載 << 輸出運算符時,使用 << ;編譯器實現優化,選擇一種方式輸出
3、二義性
- 轉換函數的基本規則:
- 轉換函數只能是成員函數,無返回值,空參數。
- 不能定義到void的轉換,也不允許轉換成數組或者函數類型。
- 轉換常定義爲const形式,原因是它並不改變數據成員的值。
- 標準轉換函數
編譯時轉換:reinterpret_cast、const_cast、static_cast運行時候轉換dynamic_cast
1、reinterpret_cast
reinterpret_cast(expression)
將一個類型的指針轉換爲另一個類型的指針,它也允許從一個指針轉換爲整數類型
2、const_cast
const_cast< new type>( expression)
const指針與普通指針間的相互轉換,注意:不能將非常量指針變量轉換爲普通變量
3、static_cast
static_cast(expression)
主要用於基本類型間的相互轉換,和具有繼承關係間的類型轉換
4、dynamic_cast
dynamic_cast(expression)
只有類中含有虛函數才能用dynamic_cast;
僅能在繼承類對象間轉換dynamic_cast具有類型檢查的功能,比static_cast更安全
- 轉換函數 --以成員函數形式存在。