c++中單引數建構函式是可以被隱式呼叫的,主要有兩種情形會隱式呼叫單引數建構函式:
(1)同型別物件的拷貝構造;即用相同型別的其它物件來初始化當前物件。
(2)不同型別物件的隱式轉換。即其它型別物件隱式呼叫單引數拷貝建構函式初始化當前物件。比如a a=1;
就是隱式轉換,而不是顯示呼叫建構函式,即a a(1);
。像a(1)這種涉及型別轉換的單引數建構函式,又被稱為轉換建構函式(converting constructor)。
單引數建構函式的隱式呼叫示例如下:
#include using namespace std;
class myint
int getmyint() const
private:
int dnum;
};int main()
explicit myint(const myint& objmyint)
int getmyint() const
private:
int dnum;
};int main()
當然,多形參建構函式是沒有建構函式的隱式轉換,所以沒必要宣告explicit。
[1]陳剛.c++高階高階教程[m].武漢:武漢大學出版社,2008:1.17explicit的用法
[2]改善c++程式的150個建議[m].李健:提防隱式轉換帶來的麻煩
[3]深入理解c++中的explicitkeyword
018 C explicit建構函式
英 k spl s t 美 k spl s t adj.明確的,清楚的 直言的 詳述的 不隱瞞的 看到上面的英文解釋,我們應該就知道explicit建構函式是什麼意思了 顯式的建構函式!一 隱式建構函式 如果c 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型...
C explicit建構函式例項解析
按照程式設計客棧c語言預設規定,只有乙個引數的建構函式也定義了乙個隱式轉換,將該建構函式對應資料型別的資料轉換為該類物件,如下面所示 class string string s1 hello ok 隱式轉換,等價於string s1 string hello 但是有的時候可能會不需要這種隱式轉換,如...
構造方法 空參構造 有參構造
1.給物件的資料或屬性進行初始化 2.特點 一 方法名與類名相同 二 沒有返回值型別,連void都沒有 三 沒有返回值 四 構造方法不能用物件呼叫,在建立物件時,系統會自動呼叫 public class play class person public person string name,int ...