我需要一个这样的课程:
class MyClass
{
MyClass()
{
}
public:
MyClass(signed = 0)
{
}
}
我想知道是否有可能选择性地调用这些构造函数。实际上我需要的是有两个版本的构造函数。一个用于创建具有默认值的对象,如我的示例中的第二个构造函数,另一个用于创建默认/原始/未初始化的对象,而不使用在同一类内部使用的任何参数。
我可以遵循以解决这个问题:
class MyClass
{
MyClass(float)
{
}
public:
MyClass(signed = 0)
{
}
}
要调用我班级中的第一个构造函数,但是使用未使用的参数很奇怪。
答案 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.
}