所以我有以下的代码工作得很好:类的构造函数
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