【问题标题】:Class constructor using other object使用其他对象的类构造函数
【发布时间】:2014-09-01 08:39:51
【问题描述】:

所以我有以下代码很好用:

CMyClass& CMyClass::operator=(DWORD rhs) 

...

CMyClass exc;
exc = GetLastError();

它可以满足我的所有期望(调用 = 运算符中的内容。) 我想知道如何获取它,以便我可以像下面这样编写它:

CMyClass exc = GetLastError();

我尝试使用上述方法,但它没有调用 = 运算符功能,而是只给我留下了一个只调用了默认构造函数的类。

谢谢

【问题讨论】:

  • 写一个转换构造函数,CMyClass(DWORD rhs);。然后你甚至可以摆脱赋值运算符。

标签: c++ constructor operator-overloading


【解决方案1】:

需要一个构造函数。

CMyClass(DWORD rhs)

或显式

explicit CMyClass(DWORD rhs)

警告,隐式构造函数允许编译;

CMyClass exc = GetLastError();

但它也参与编译器生成的隐式构造和转换。通常最好是明确写出来;

CMyClass exc ( GetLastError() );

【讨论】:

  • 好的,谢谢。你能澄清一下it also participates in compiler generated implicit constructions and conversions的意思吗
  • 基本上,如果另一种类型说,class ABC 有类型转换为DWORD (operator DWORD();),那么这也会编译; CMyClass exc = abc; 其中abcABC 的一个实例。或者更糟糕的是,如果 CMyClass 是函数 void Func(CMyClass) 的参数,那么这将编译 Func(abc)
  • @Luke,有关显式的更多详细信息,请参阅here。第一个答案基本上和我给你的例子一样。第二个答案有更多原因......最好的建议是通常(默认情况下)添加显式,除非它需要不存在。
猜你喜欢
  • 2016-01-06
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 2015-06-03
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
相关资源
最近更新 更多