c++ - 当我在 C++ 中派生一个类时,它是否创建一个基类的对象并将其作为我的成员变量存储在派生类中?

标签 c++ qt oop inheritance

假设我创建了一个派生类,如下所示,

    class CHIProjectData : public QObject 
{ 
CHIProjectData(QMap<QString,QString> aProjectData,
                           CHIMetaData* apMetaData = 0,
                           QObject* parent = 0); 
    private:
            QMap<QString,QString> m_strProjectData;
            CHIAkmMetaData* m_pMetaData; 
};

我实现了,

CHIProjectData::CHIProjectData(QMap<QString,QString> aProjectData,
                               CHIMetaData* apMetaData,
                               QObject* aParent)
    :m_strProjectData(aProjectData),
    m_pMetaData(apMetaData),
    QObject(aParent)
{

}

我知道我在构造函数中初始化了成员变量m_strProjectData、m_pMetaData。但是最后一部分“QObject(aParent)”是做什么的呢?它是否创建基类的对象并将其视为成员变量?

最佳答案

QObject(aParent) 使用aParent 参数调用QObject 的构造函数。 QObject 在这种情况下不是成员变量。这似乎是一个微妙的问题,但它很重要,因为您访问子对象的属性和方法的方式需要与成员变量不同的语法。

这是一个类比,试图理解子对象和成员变量之间的区别。

在电影《 bat 侠:暗夜》中有一个场景是 bat 侠开着车追杀坏人。但是汽车损坏无法使用,他不得不逃跑。就在那时, bat 侠按下一个按钮,汽车的一部分从其余部分分离,变成了一辆摩托车。这有点像子对象。汽车is a摩托车。

现在考虑一辆房车拖着一辆较小的车辆的情况,这种类型的车辆在美国的高速公路上很常见。在这种情况下,RV has a车辆。 vehicle是RV的成员变量。

关于c++ - 当我在 C++ 中派生一个类时,它是否创建一个基类的对象并将其作为我的成员变量存储在派生类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3507352/

相关文章:

qt - Qml QTouchDevice

php - OO编程有什么好处?它会帮助我编写更好的代码吗?

java - 从序列化构建对象 - 哪个是首选?

c++ - ld.exe : cannot find -lmsvcrt

c++将指针传递给函数

c++ - 在 Visual C++ 中禁用#pragma message ("...")?

javascript - 如何在 native javascript中获取动态对象函数中的函数名称

c++ - 如何在 C++ 中用填充函数初始化双维 bool 数组/字符数组?

c++ - 使用 VS2010 Pro 在 Windows 8 上构建 Qt 4.8

python - 如何在PyQt 5.9中访问录音音量?