gpt4 book ai didi

C++,如何在派生类中调用基类的重载提取运算符?

转载 作者:IT老高 更新时间:2023-10-28 22:33:32 26 4
gpt4 key购买 nike

所以这是我的一个大型作业的一小部分,我只是不确定它的语法。

我有一个名为 Vehicle 的基类,其中有这些成员:int fuelAmtint 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

最佳答案

由于操作符 << 是一个非成员函数,你不能将它声明为虚拟的,这正是你想要的。所以你执行以下操作

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);
}

关于C++,如何在派生类中调用基类的重载提取运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8428606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com