来自Effective Java 2ed Item 2:
telescoping构造函数模式,在其中提供构造函数 只有所需的参数,另一个只有一个可选参数 参数,带有两个可选参数的第三个,依此类推, 最终在一个带有所有可选参数
的构造函数中
我可以在C ++中做同样的事吗?我试过这样的事情:
MyClass::MyClass(QWidget *parent)
{
MyClass(NULL, NULL, NULL, parent);
}
MyClass::MyClass(QString title, QWidget *parent)
{
MyClass(title, NULL, NULL, parent);
}
MyClass::MyClass(QString title, QString rightButton, QWidget *parent)
{
MyClass(title, NULL, rightButton, parent);
}
MyClass::MyClass(QString titleLabel, QString leftButtonLabel, QString rightButtonLabel, QWidget *parent)
: QWidget(parent)
{
// construct the object
}
但它不起作用。任何提示?
我是C ++领域的新人,所以...抱歉新问题
答案 0 :(得分:7)
这在c ++ 11中称为委托构造函数,如下所示:
MyClass::MyClass(QWidget *parent)
: MyClass(NULL, NULL, NULL, parent)
{
}
而你的版本会产生一个立即被销毁的临时版。
答案 1 :(得分:6)
最简单的方法是为构造函数参数提供默认值。
如果这不起作用,通常会创建一个Init
方法,由每个构造函数调用,以便不重复代码。
答案 2 :(得分:1)
MyClass::MyClass(QWidget *parent)
{
MyClass(NULL, NULL, NULL, parent);
}
应该是
MyClass::MyClass(QWidget *parent) :
MyClass(NULL, NULL, NULL, parent)
{
}
等