类重构:带参数的继承

Class refactoring : inheritance with parameter

本文关键字:继承 参数 重构      更新时间:2023-10-16

我有一个使用以下形式声明的类

MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
{
    ...
}

我想用这样的形式重构它:

class MainWindow : QMainWindow, ui 
{
    MainWindow(QWidget *parent)
    {
        ...
    }
}

但是我去掉了第一种形式的参数。这个参数是什么意思?

如何让他们保持第二种状态?请向我解释第一个语法(或指向教程)。我不理解带参数的继承。

编辑:

我现在明白了这个问题,这个类是在一个单独的.h文件中初始化的,我第一眼没有看到。我想:之后的方法定义是继承运算符,而它是成员初始化运算符。

这是构造函数的实现,调用基类构造函数并初始化初始化列表中的数据成员:

MainWindow(QWidget *parent) :
        QMainWindow(parent),   // call base class constructor
        ui(new Ui::MainWindow) // initialize data member ui
{
    ...
}

该类很可能继承自QMainWindow,并具有一个名为uiUi::MainWindow*数据成员。您的第二个代码片段似乎是一次错误的声明类的尝试。不存在这样的"带参数的继承",因此您不能按要求执行。

第一个是constructorinitializer-list initialization,这个例子很好。第二个例子永远不会编译,因为它是错误的语法。例如,在这个特定的例子中,使用成员初始值设定项列表和在构造函数中赋值之间有区别吗?有关第一语法的解释。