是否可以在构造函数中调用另一个构造函数两次?
class Constructor
{
public:
Constructor()
{
printf("Default constructor\n");
}
explicit Constructor(int _a) : Constructor("explicit")
{
printf("Integer constructor\n");
this->a = _a;
}
Constructor(std::string _str) : str(_str)
{
printf("string constructor\n");
Constructor(true);
Constructor(1, 2);
}
Constructor(bool _flag) : flag(_flag)
{
printf("Bool constructor");
}
Constructor(int a, int b)
{
printf("one more");
}
void Print()
{
printf("a = %d\n", a);
printf("flag = %d\n", flag);
}
private:
int a;
std::string str;
bool flag = false;
};
int main()
{
Constructor cons(1);
cons.Print();
return 0;
}
我希望在控制台中看到:
字符串构造函数
Bool 构造函数
再一个
Integer 构造函数 a = 1 flag = 1
相反:
bool 构造函数整数构造函数 a = 1 标志 = 1
如果要在同一对象的上下文中创建其他(!)相同类类型的对象,则可以调用构造函数,这发生在 中
Constructor(true); Constructor(1, 2);
,当构造函数结束时它们会立即被删除。只有通过多级构造函数委托才能从单个类构造函数调用多个类构造函数。
委托的构造函数的选择是根据通常的重载决议规则完成的。根据这些规则,将参数转换为
"explicit"
typebool
优于转换为 typestd::string
。因此,使用类型参数调用构造函数bool