«можно использовать функцию загрузки из базового класса и добавить дополнительные элементы данных, такие как размер двигателя для спортивных автомобилей, которые будут загружены из файла.»
Если функция объявлена virtual
в классе Car
вы можете изменить и расширить его в производном классе
class Car {
public:
virtual void Load(istream& carFile);
};
class SportsCar : public Car {
public:
virtual void Load(istream& carFile);
private:
int EngineSize;
};
void SportsCar::Load(istream& carFile)
{
Car::Load(carFile);
carFile >> EngineSize;
}
Примечание я использовал std::istream
в моем примере кода, так как это не если поток поступает из файла для этих частей кода.
Вы, вероятно, нужно дискриминатор для данного типа автомобиля в файле (std::istream
соответственно), чтобы решить, какой класс на самом деле должны быть созданы:
class CarFactory {
public:
static Car* LoadCarFromStream(istream& carStream) {
string carType;
Car* carResult = nullptr;
if(carStream >> carType) {
if(carType == "Car") {
carResult = new Car();
}
else if(carType == "SportsCar") {
carResult = new SportsCar();
}
}
if(carResult) {
carResult->Load(carStream);
}
return carResult;
}
};
Да, если это виртуально, вы можете переопределить и вызвать родителя, чтобы сначала сделать базовый материал, а затем сделать дополнительные вещи для определенных полей производного класса. –