Arhn - архитектура программирования

Не удается получить правильный вывод для файла при использовании наследования

Таким образом, весь смысл моей программы заключается в том, чтобы прочитать входные данные из файла и выполнить некоторые вычисления, а затем вывести результаты в файл. В этом участвует несколько файлов, но для простоты я просто включу два файла реализации для моей программы. Файл реализации «employee» является базовым классом, а файл «merit» — производным классом.

Теперь для вывода я должен получить его в формате: ID --- Зарплата

Я получаю правильный результат для зарплаты, но я получаю неправильные цифры для ID. Я знаю, что это связано с тем, что в функции Merit::print() печатается [merit::ID], а не [employee::ID].

Есть ли способ заставить его распечатать employee::ID, а не заслугу::ID?

Ниже приведен файл базового класса (файл сотрудника):

#include <iostream>
#include <fstream>
#include <iomanip>
#include "employee.h"
#include "merit.h"


using namespace std;

// The definition of the members functions of the class employee goes here.

void employee::readData(ifstream& inf)
{
    inf >> ID >> Job_class >> Years >> Ed;
}




void employee::print(ofstream& outf) const
{
    outf << ID << setw(15) << fixed << showpoint << setprecision(2) << "$ " << sal << endl;
}

Следующий файл является файлом производного класса (файл заслуг):

void merit::readData(ifstream& inf)
{
    employee::readData(inf);
    inf >> mer;

}



void merit::print(ofstream& outf) const
{
    outf << ID << setw(15) << fixed << showpoint << setprecision(2) << "$ " << salary << endl;
}
21.03.2017

  • Является ли ID статическим? 21.03.2017
  • @Jerfov2 ID считывается из входного файла. И тогда он должен отображаться во входном файле. Функция Merit::readData() вызывает функцию employee::readData(), которая считывает идентификатор из входного файла. 21.03.2017
  • @Jerfov2 ID является частным. Он был объявлен в заголовочном файле сотрудника. 21.03.2017
  • Вы уверены, что читаете правильное значение из ввода в ID? Это может быть ваша проблема: чтение из файла 21.03.2017
  • Да, он читает правильное значение. Если бы я использовал только файл сотрудника для этой программы, я бы получил правильные результаты. Класс заслуг не печатает идентификатор, считанный в функции employee::readData(). 21.03.2017
  • Вы не можете прочитать частный член базового класса в производном (для этого используйте геттеры). Кроме того, экземпляр базового класса требуется в вашем производном (в конструкторе достоинств). 21.03.2017
  • @Papipone Да, это была моя главная ошибка. Мне просто нужно было изменить идентификатор с частного на общедоступный. Спасибо! 21.03.2017
  • Вы также можете сделать его защищенным. Таким образом, он будет доступен только через ваш базовый класс и в ваших производных. 21.03.2017

Ответы:


1

Вы не показали нам свои заголовочные файлы, в которых вы определяете классы, так что это может быть не совсем правильно. Я предполагаю, что и у employee, и у merit есть член по имени ID.

Чтобы получить доступ к члену базового класса с тем же именем, что и член производного класса, просто укажите имя. В вашем случае используйте employee::ID вместо ID.

Вы указали в комментарии, что ID является закрытым в employee, поэтому вам нужно будет использовать функцию получения. Добавьте что-то вроде int getEmployeeID() const; в свой класс employee (он может быть как защищенным, так и общедоступным), который будет возвращать идентификатор. Затем вызовите это из своего класса merit, чтобы получить идентификатор сотрудника.

21.03.2017
  • Спасибо, это было очень полезно. 21.03.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..