伸缩式建造师

Telescoping constructor

本文关键字:      更新时间:2023-10-16

来自有效Java 2ed项目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++领域的新手,所以…很抱歉出现新手问题

这在c++11中被称为委托构造函数,其操作如下:

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

而您的版本会生成一个临时文件,该文件会立即被销毁。

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

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

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

应该是

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

等等。

相关文章:
  • 没有找到相关文章