我有一个名为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
似乎也很好。
答案 0 :(得分:3)
看起来你正在做的事情是完全正确的,因为C ++ 11。
请参阅Inheriting constructors和C++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
只是提供内容并且不会调用任何内容。