7

来自 Effective Java 2ed Item 2:

伸缩构造函数模式,在该模式中,您提供一个仅具有必需参数的构造函数,另一个具有单个可选参数,第三个具有两个可选参数,依此类推,最终形成具有所有可选参数的构造函数

我可以在 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++ 领域的新手,所以.. 抱歉 newbee 问题

4

3 回答 3

9

这在 c++11 中称为委托构造函数,其完成方式如下:

MyClass::MyClass(QWidget *parent)
    : MyClass(NULL, NULL, NULL, parent)
{   
}

而您的版本会产生一个立即销毁的临时版本。

于 2012-07-31T20:46:06.463 回答
6

最简单的方法是为构造函数参数提供默认值。

如果这不起作用,您通常会创建一个Init由每个构造函数调用的方法,这样代码就不会重复。

于 2012-07-31T20:45:28.590 回答
1
MyClass::MyClass(QWidget *parent)
{   
    MyClass(NULL, NULL, NULL, parent);
}

应该

MyClass::MyClass(QWidget *parent) :
    MyClass(NULL, NULL, NULL, parent)
{   
}

等等

于 2012-07-31T20:45:11.137 回答