Как повторно использовать переменные из базового класса в производный класс

#c #class #derived-class

#c #класс #производный класс

Вопрос:

Я работаю над проектом, чтобы показать статистику для общего транспортного средства, затем для легкового и грузового автомобиля. У всех объектов есть производитель и год выпуска, но у автомобиля есть количество дверей, а у грузовика есть буксировочная способность.

У меня есть класс vehicle и конструкторы классов, все они работают правильно в коде.

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

 #pragma once
#include <iostream>

#include <string>
using namespace std;

class Vehicle {
  private:
    string manu;
    int year;

  public:
    // Default constructor
    Vehicle() {
        manu = "";
        year = 0;
    }

    // Constructor
    Vehicle(string autoManu, int autoYear) {
        manu = autoManu;
        year = autoYear;
    }

    // Accessors
    string getManu() const { return manu; }

    int getModel() const { return year; }

    void storeInfo(string autoManu, int autoYear);
    void displayInfo();
};
 

Это мой файл Vehicle.h ^

 #include "Vehicle.h"

void Vehicle::storeInfo(string autoManu, int autoYear) {
    manu = autoManu;

    year = autoYear;
}
void Vehicle::displayInfo() {
    cout << "Manufacturer- " << manu << endl;
    cout << "Make Year- " << year << endl;
}

 

Это мой Vehicle.cpp файл ^

Оба они работают отлично, теперь я хочу использовать тот же тип displayInfo для класса Car.

 #pragma once
#include <iostream>

#include "Vehicle.h"
#include <string>
using namespace std;

// The Car class represents a car.
class Car : public Vehicle {
  private:
    int doors;

  public:
    // Default constructor
    Car() : Vehicle() { doors = 0; }

    // Constructor #2
    Car(string carManu, int carYear, int carDoors) : Vehicle(carManu, carYear) {
        doors = carDoors;
    }

    // Accessor for doors attribute
    int getDoors() { return doors; }

    void storeInfo(string autoManu, int autoYear, int carDoors);
    void displayInfo();
};
 

Это мой файл Car.h ^

 #include "Car.h"

void Car::storeInfo(string autoManu, int autoYear, int carDoors) {
    manu = autoManu;

    year = autoYear;

    doors = carDoors;
}

void Car::displayInfo() {
    cout << "Manufacturer- " << manu << endl;
    cout << "Make Year- " << year << endl;
    cout << "Doors on the Car" << doors << endl;
}
 

Это Car.cpp досье.
Проблема, с которой я сталкиваюсь, заключается в том, что переменные menu и year, переменные, определенные в базовом классе, говорят «Vehicle::manu недоступен»

Что может быть причиной этого и каково исправление?

Спасибо!

Комментарии:

1. Вызов Vechicle::displayInfo(); Car::displayInfo() . И аналогично с storeInfo . Вы уже знаете, как делегировать конструктору базового класса — теперь научитесь делегировать функции-члены базового класса.

2. Вы могли бы создать свои переменные protected так, чтобы производные классы могли получать к ним доступ.