调用默认构造函数而不是使用默认参数重载

时间:2016-05-03 16:11:41

标签: c++

我需要一个这样的课程:

class MyClass
{
  MyClass()
  {
  }

  public:
  MyClass(signed = 0)
  {
  }
}

我想知道是否有可能选择性地调用这些构造函数。实际上我需要的是有两个版本的构造函数。一个用于创建具有默认值的对象,如我的示例中的第二个构造函数,另一个用于创建默认/原始/未初始化的对象,而不使用在同一类内部使用的任何参数。

我可以遵循以解决这个问题:

class MyClass
{
  MyClass(float)
  {
  }

  public:
  MyClass(signed = 0)
  {
  }
}

要调用我班级中的第一个构造函数,但是使用未使用的参数很奇怪。

1 个答案:

答案 0 :(得分:0)

您有几个选择。你的“解决方案”并不疯狂,实际上它是一种在某些情况下受到鼓励的模式。但是请考虑使用named-constructor习惯用法:如果你需要在同一个类的成员函数中创建一个未初始化的对象,那么创建一个命名的私有c'tor来实现这个目的:

class MyClass {
public:
  MyClass(float f = 0.) : value_{f} {}
private:      
  float value_;

  void g();
  MyClass invalid() 
  { 
    return MyClass{std::numeric_limits<float>::max()}; }
};

这样,在MyClass::g()内,你可以这样做:

void MyClass::g()
{
  auto newObj = invalid(); // call named c'tor
  newObj.value_ = 3.14159;
  std::swap(newObj, *this) // swap current object with 'newObj'
  // or whatever.
}