C++, Как вызвать перегруженный оператор извлечения базовых классов в производном классе?
Итак, это небольшая часть большого задания, которое у меня есть, я просто не уверен в синтаксисе для этого.
у меня есть базовый класс с именем Vehicle
, который имеет следующие элементы: int fuelAmt
и int fuelUsage
)
(я использую пространство имен std
)
я перегрузил <<
оператор таким образом:
ostream& operator<<(ostream& osObject, const Vehicle& myVehicle)
{
cout << "Fuel Usage Rate: " << myVehicle.fuelUsage << endl
<< "Fuel Amount: " << myVehicle.fuelAmt << endl;
return osObject;
}
я тогда называю это так:
cout << Vehicle;
результат (пример):
Fuel Usage Rate: 10;
Fuel Amount: 50;
я тоже есть Airplane
класс, производный от Vehicle
класса, он вводит нового члена: int numEngines
.
как я могу перегрузить <<
оператор Airplane
класс, так что он сначала вызовет "перегруженные результаты оператора транспортного средства", а затем результаты того, что я скажу <<
оператор печати из производного класса... Итак, вот что я имею в виду:
мне нужно, чтобы он функционировал так в Airplane
класс:
ostream& operator<<(ostream& osObject, const Airplane& myAirplane)
{
//First print the Fuel Usage rate and Fuel amount by calling
//the Base class overloaded << function
//then
cout << "Number of Engines: " << myAirplane.numEngines << endl;
return osObject;
}
как мне вызвать выполнение базового класса вывода значений его членов в этом производном классе?
это что-то вроде изменение заголовка? Вот так:
ostream& operator<<(ostream& osObject, const Airplane& myAirplane): operator<<Vehicle
3 ответов
Как насчет следующего:
ostream& operator<<(ostream& osObject, const Airplane& myAirplane)
{
osObject << static_cast<const Vehicle &>(myAirplane);
osObject << "Number of Engines: " << myAirplane.numEngines << endl;
return osObject;
}
поскольку оператор
class Base
{
public:
virtual std::ostream& output(std::ostream& out) const
{
return out << "Base";
}
virtual ~Base() {} //Let's not forget to have destructor virtual
};
class Derived : public Base
{
public:
virtual std::ostream& output(std::ostream& out) const
{
Base::output(out); //<------------------------
return out << "DerivedPart";
}
virtual ~Derived() {} //Let's not forget to have destructor virtual
};
и, наконец, есть оператор
std::ostream& operator << (std::ostream& out, const Base& b)
{
return b.output(out);
}
ostream& operator<<(ostream& osObject, const Airplane& myAirplane)
{
//First print the Fuel Usage rate and Fuel amount by calling
//the Base class overloaded << function
cout << (Vehicle& ) myAirplane;
//then
cout << "Number of Engines: " << myAirplane.numEngines << endl;
return osObject;
}