Наследование классов с аргументом в c ++ - PullRequest
0 голосов
/ 30 апреля 2020

Я изучаю qt из Hands On Embedded Programming с книгой Qt.

Я не понимаю, почему я могу добавить Inheritance m_tempSensor (id) с аргументом id , когда конструктор TemperatureSensorIF не ожидает никакого аргумент и почему в качестве аргумента я даю указатель на "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;
}

Спасибо;)

Адриан

1 Ответ

0 голосов
/ 30 апреля 2020

Вызывая : m_tempSensor(id), вы инициализируете унаследованную переменную-член, которая отличается от вызова родительского конструктора. В вашем случае конструктор родительского класса вызывается автоматически, потому что он не имеет параметров, что эквивалентно:

MainWindow::MainWindow(TemperatureSensorIF *id): 
  TemperatureSensorIF(),
  m_tempSensor(id)
{
  qDebug() << "New window constructor";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...