簡體   English   中英

調用默認構造函數而不是使用默認參數重載

[英]Calling default constructor instead of overloaded with default parameter

我需要這樣的課程:

class MyClass
{
  MyClass()
  {
  }

  public:
  MyClass(signed = 0)
  {
  }
}

我想知道是否可以有選擇地調用這些構造函數。 實際上我需要的是有兩個版本的構造函數。 一個創建具有默認值的對象,如我的示例中的第二個構造函數,另一個創建一個沒有任何參數的默認/原始/未初始化對象,該對象在同一類中內部使用。

我可以做以下來克服這個問題:

class MyClass
{
  MyClass(float)
  {
  }

  public:
  MyClass(signed = 0)
  {
  }
}

並在我的類中調用第一個構造函數,但有未使用的參數很奇怪。

你有幾個選擇。 你的“變通辦法”並不瘋狂,事實上它是在某些情況下被鼓勵的一種模式。 但請考慮命名構造函數的習慣用法:如果您需要在同一個類的成員函數中創建一個未初始化的對象,那么創建一個命名的私有 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.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM