所以我有以下的代碼工作得很好:類的構造函數
CMyClass& CMyClass::operator=(DWORD rhs)
...
CMyClass exc;
exc = GetLastError();
而且它的一切我期望它(調用=
運營商內部的東西。) 我不知道怎麼弄它讓我可以代替它寫像下面這樣:
CMyClass exc = GetLastError();
我嘗試使用上面的,它不叫=
操作的功能,而不是隻留下我一類,即只有默認的構造函數已調用。
謝謝
所以我有以下的代碼工作得很好:類的構造函數
CMyClass& CMyClass::operator=(DWORD rhs)
...
CMyClass exc;
exc = GetLastError();
而且它的一切我期望它(調用=
運營商內部的東西。) 我不知道怎麼弄它讓我可以代替它寫像下面這樣:
CMyClass exc = GetLastError();
我嘗試使用上面的,它不叫=
操作的功能,而不是隻留下我一類,即只有默認的構造函數已調用。
謝謝
構造函數是必需的。
CMyClass(DWORD rhs)
或明確
explicit CMyClass(DWORD rhs)
被警告,隱含的構造函數允許該編譯;
CMyClass exc = GetLastError();
但它也參與了編譯器生成的隱式構造和轉換。通常情況下最好是明確和書寫;
CMyClass exc (GetLastError());
好的,謝謝。你可以澄清你的意思嗎?它也參與了編譯器生成的隱式構造和轉換。' – Luke 2014-09-01 08:45:36
基本上,如果另一種類型說'class ABC'有一個類型轉換爲'DWORD'('operator DWORD();'),那麼這也會編譯; 'CMyClass exc = abc;'其中'abc'是'ABC'的一個實例。或者更糟的是,如果'CMyClass'是一個函數'void Func(CMyClass)'的參數,那麼這將編譯'Func(abc)' – Niall 2014-09-01 08:47:46
再次感謝,非常豐富。 – Luke 2014-09-01 08:51:45
寫一個轉換構造函數'CMyClass(DWORD rhs);'。然後你甚至可以擺脫賦值操作符。 – juanchopanza 2014-09-01 08:41:10