建構函式constructor和型別轉換
1. 構造函式呼叫的時候只帶乙個引數時(引數列表為乙個引數或者多個引數帶有預設引數),才可以執行自動轉換。即該建構函式的引數型別可以自動轉換成該類型別。
object(const char *name=null, int otype=0); // char * 可以自動轉換成 object型別
object(int param); // int 可以自動轉換成object.
2. 建構函式只允許一次自動轉換,不允許連續兩次或者多次自動轉換, 如例1。
3. explicit 修飾的建構函式(僅限呼叫時只帶乙個引數的建構函式才有意義),不允許程式呼叫該建構函式執行自動型別轉換。如例1和例2的對比。
4. explicit 修飾的建構函式,僅允許direct initialization(相當於explicit 呼叫constructor),不允許copy initialization(相當於implicit 呼叫constructor)。如例2.
class abc
abc::abc(int a)
例子1:普通constructor
class
foo
void
output(
void
)
private
:
std::
string
m_string
;};
void
func(
fooa)
int
main()
例子2:explicit constructor
class
foo
void
output(
void
)
private
:
std::
string
m_string
;};
void
func(
fooa)
int
main()
參考文獻
c++ primer 5th
c 型別轉換建構函式
定義轉換建構函式的目的是實現型別的自動轉換。只有乙個引數,而且不是複製建構函式的建構函式,一般 就可以看作是轉換建構函式。當需要的時候,編譯系統會自動呼叫轉換建構函式,建立 乙個無名的臨時物件 或臨時變數 include using namespace std class complex compl...
C 轉換建構函式和轉換函式
1 轉換建構函式的作用 作用 將某種型別轉換為類型別 例如有下面的 base int a 轉換建構函式 base b 物件 b 12 解析 程式將使用建構函式base int a 構造出乙個臨時的無名base物件,並用12對其初始化。然後採用逐個成員賦值的方式將該臨時物件的內容賦值給物件b。這一過程...
型別轉換函式 轉換建構函式
用途 將乙個其它型別的資料轉換成自定義的類型別。注意 這種建構函式只有乙個引數,但要區別於拷貝建構函式 形參是乙個自定義型別的引用 例子 include using namespace std class complex 這個預設的建構函式便可以充當 轉換建構函式 complex double r ...