#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
так, чтобы производные классы могли получать к ним доступ.