只有乙個引數的建構函式可以作為轉換建構函式,預設情況下會發生隱式轉換,但是如果你對轉換建構函式加上了關鍵字explicit,它就不允許隱式轉換,但是你可以通過static_cast等進行強制轉換。
而且只允許一步類型別轉換,什麼意思呢?
比如乙個類str,它有乙個建構函式,這個建構函式只需要乙個引數,且這個引數型別為string,那麼你不可以通過str s = 「qwe」來利用乙個臨時str物件初始化s,因為這個臨時物件需要兩步轉換才可以成為str
第一步:把「qwe」變成string型別
第二步:把string型別通過轉換建構函式變成str型別
str s = string(「qwe」)——這個就可以
這個說明白了,我們再說一下型別轉換運算子:
比如說你在類str中定義了乙個這個型別轉換成int型別的型別轉換函式,然後預設下如果在下面這種情況下:
str s;
int b;
int a = s+b;
s就會隱式轉換成int型別進行運算(也可以對它使用explicit來禁止其隱式轉換)
型別轉換運算子形式:
operator type() const; //type可以是int、double、bool這些型別。不允許有形參,返回值型別為type
型別轉換函式 轉換建構函式
用途 將乙個其它型別的資料轉換成自定義的類型別。注意 這種建構函式只有乙個引數,但要區別於拷貝建構函式 形參是乙個自定義型別的引用 例子 include using namespace std class complex 這個預設的建構函式便可以充當 轉換建構函式 complex double r ...
型別轉換函式 轉換建構函式
用途 將乙個其它型別的資料轉換成自定義的類型別。注意 這種建構函式只有乙個引數,但要區別於拷貝建構函式 形參是乙個自定義型別的引用 例子 include using namespace std class complex 這個預設的建構函式便可以充當 轉換建構函式 complex double r ...
型別轉換建構函式
include stdafx.h include using namespace std include 用型別轉換建構函式進行型別轉換 class point2d friend class point3d 設定友元類 private int x int y class point3d if 0 我...