【问题标题】:Inheritance of classes with an argument in c++c++中带参数的类的继承
【发布时间】:2020-08-14 11:06:18
【问题描述】:

我从 Hands On Embedded Programming with Qt 一书中学习 qt。

我不明白为什么当 TemperatureSensorIF 构造函数不需要任何参数时,我可以添加带有 id 参数的 Inheritance m_tempSensor(id),以及为什么我将指针指向“TemperatureSensorIF”作为参数。

完整代码链接:

https://github.com/PacktPublishing/Hands-On-Embedded-Programming-with-Qt/blob/master/Chapter05/BigProject/MainWindow.cpp

有类似的东西:

#include <QCoreApplication>
#include <QtDebug>

class TemperatureSensorIF {
public:
    explicit TemperatureSensorIF(){

    }
};

class MainWindow: public TemperatureSensorIF{
public:
    MainWindow(TemperatureSensorIF *id);
    //~MainWindow();
private:
    TemperatureSensorIF *m_tempSensor;
};

MainWindow::MainWindow(TemperatureSensorIF *id): m_tempSensor(id){
    qDebug() << "New window constructor";
}


int main()
{
    qDebug() << "Init";
    TemperatureSensorIF sensor1;
    MainWindow newWindow(&sensor1);

    return 0;
}

谢谢 ;)

阿德里安

【问题讨论】:

  • 你真的应该让MainWindow继承TemperatureSensorIF吗?请记住,继承是一种 is-a 关系。 MainWindow 真的是 TemperatureSensorIF 吗?还是应该只包含一个TemperatureSensorIF(在某种程度上它也是如此)?
  • 另请注意,您链接到的代码确实继承自TemperatureSensorIF
  • 特别是 MainWindow 应该包含温度传感器和模拟函数以将它们连接在一起。

标签: c++ qt inheritance


【解决方案1】:

调用: m_tempSensor(id)你初始化继承的成员变量,这与调用父构造函数不同。在您的情况下,父类构造函数被自动调用,因为它没有参数,相当于:

MainWindow::MainWindow(TemperatureSensorIF *id): 
  TemperatureSensorIF(),
  m_tempSensor(id)
{
  qDebug() << "New window constructor";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2014-12-25
    • 2014-07-15
    • 2015-06-01
    • 1970-01-01
    相关资源
    最近更新 更多