![](/img/trans.png)
[英]Why does calling an overloaded constructor cause a call of the default constructor?
[英]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.