C++ Наследование

Всем привет! Решаю задачу на наследование.

Требуется создать базовый класс, в котором будет хранится значения, реализован ввод и ввывод. Все вычитания нужно реалзиовать в другом классе.

Пытался решить следующим образом, но через класс hours немогу получить значения из класса data и ввыводит мусор. Буду благодарен за помощь!

#include <stdio.h>

class data
{

protected:

    int age, h_st, m_st, h_fi, m_fi, break_min, x_crystal;


public:

    void input() {
        scanf_s("%d %d %d %d %d %d %d", &age, &h_st, &m_st, &h_fi, &m_fi, &break_min, &x_crystal);
    }

    void output(int x) {
        printf("%d\n", x);
    }

};


class hours: public data
{
public:
    int calculate() {
        int result = (h_fi - h_st);
        output(result);
    }
};

int main() {

    int n;
    scanf_s("%d", &n);

    data* workers = new data[n];
    hours* worked_time = new hours[n];

    for (int i = 0; i < n; i++) {
        workers[i].input();
        worked_time[i].calculate();

    }
    



}

Ответы (2 шт):

Автор решения: vanesicks

Вы используете разные объекты разных классов.
Насколько понял, вам нужно использовать объект класса worked_time, в котором будут нужные вам поля и методы из базового класса.

int main() {

    int n;
    scanf_s("%d", &n);

    hours* worked_time = new hours[n];

    for (int i = 0; i < n; i++) {
        worked_time[i].input();
        worked_time[i].calculate();
    }

}
→ Ссылка
Автор решения: ТарасПрогер
hours* worked_time = new hours[n];

for (int i = 0; i < n; i++) {
    worked_time[i].input();
    worked_time[i].calculate();

}

В вашем примере, вы создали 2 разных объекта, что и приводит к неинициализированной памяти

→ Ссылка