从基于QObject的类继承构造函数

时间:2015-03-31 08:13:02

标签: c++ qt inheritance qobject

我有一个名为MiscData的类,它继承QObject并且有一个成员变量(模型)。然后是一堆继承MiscData的其他类,并重新实现其虚函数以填充模型。所以它看起来像这样:

class MiscData : public QObject
{
    Q_OBJECT
public:
    explicit MiscData(QObject *parent = 0);
    QAbstractItemModel &model();
private:
    virtual void loadData() = 0;
private:
    QStandardItemModel m_Model;
}

其中一个后代看起来像这样:

class LogData : public MiscData
{
    Q_OBJECT
public:
    using MiscData::MiscData;
private:
    virtual void loadData() override;
}

我知道我必须为MiscData使用显式构造函数,因为它初始化了模型成员变量。但是我想知道在派生类中使用using指令来继承这样的MiscData构造函数是否安全。

编辑:基于答案,在MiscData中使用using QObject::QObject似乎也很好。

2 个答案:

答案 0 :(得分:3)

看起来你正在做的事情是完全正确的,因为C ++ 11。

请参阅Inheriting constructorsC++11 Object construction improvement

  

请注意,这是一个全有或全无的功能;要么转发所有基类的构造函数,要么都不转发它们。

答案 1 :(得分:2)

你可以打电话给基类'初始化列表中的构造函数。

class LogData : public MiscData
{
    Q_OBJECT
public:
    explicit LogData(QObject *parent = 0) : MiscData(parent) {};
private:
    virtual void loadData() override;
}

其中MiscData的构造函数应以同样的方式将parent传递给QObject

class MiscData : public QObject
{
    Q_OBJECT
public:
    explicit MiscData(QObject *parent = 0) : QObject(parent) {};
    QAbstractItemModel &model();
private:
    virtual void loadData() = 0;
private:
    QStandardItemModel m_Model;
}

如果需要,可以将构造函数的定义移动到.cpp文件中。

using只是提供内容并且不会调用任何内容。