類型別轉換(轉換建構函式 型別轉換運算子)

2022-09-04 23:15:18 字數 1385 閱讀 8726

只有乙個引數的建構函式可以作為轉換建構函式,預設情況下會發生隱式轉換,但是如果你對轉換建構函式加上了關鍵字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 我...