2014-09-01 127 views
3

所以我有以下的代碼工作得很好:類的構造函數

CMyClass& CMyClass::operator=(DWORD rhs) 

... 

CMyClass exc; 
exc = GetLastError(); 

而且它的一切我期望它(調用=運營商內部的東西。) 我不知道怎麼弄它讓我可以代替它寫像下面這樣:

CMyClass exc = GetLastError(); 

我嘗試使用上面的,它不叫=操作的功能,而不是隻留下我一類,即只有默認的構造函數已調用。

謝謝

+3

寫一個轉換構造函數'CMyClass(DWORD rhs);'。然後你甚至可以擺脫賦值操作符。 – juanchopanza 2014-09-01 08:41:10

回答

4

構造函數是必需的。

CMyClass(DWORD rhs) 

或明確

explicit CMyClass(DWORD rhs) 

被警告,隱含的構造函數允許該編譯;

CMyClass exc = GetLastError(); 

但它也參與了編譯器生成的隱式構造和轉換。通常情況下最好是明確和書寫;

CMyClass exc (GetLastError()); 
+0

好的,謝謝。你可以澄清你的意思嗎?它也參與了編譯器生成的隱式構造和轉換。' – Luke 2014-09-01 08:45:36

+2

基本上,如果另一種類型說'class ABC'有一個類型轉換爲'DWORD'('operator DWORD();'),那麼這也會編譯; 'CMyClass exc = abc;'其中'abc'是'ABC'的一個實例。或者更糟的是,如果'CMyClass'是一個函數'void Func(CMyClass)'的參數,那麼這將編譯'Func(abc)' – Niall 2014-09-01 08:47:46

+0

再次感謝,非常豐富。 – Luke 2014-09-01 08:51:45