gpt4 book ai didi

c++ - 在 C++ 中使用继承类流

转载 作者:行者123 更新时间:2023-11-28 06:18:51 25 4
gpt4 key购买 nike

我有两个类(class):父类:Vehicle

class Vehicle {
private:
string manufacturer;
int cylinder;
Person owner;
public:
Vehicle();
Vehicle(const Vehicle& theObject);
friend istream& operator >>(istream& inStream, Vehicle& object);
friend ostream& operator <<(ostream& outStream, const Vehicle& object);
};

和子类:Truck我重载了operator<<operator>>这样我就可以使用 coutcin和我类的卡车。这是我对这两个运算符的定义:

class Truck : public Vehicle {
private:
double loadCapacity;
int towingCapacity;
public:
Truck();
Truck(const Truck& object);
friend istream& operator >>(istream& inStream, Truck& object);
friend ostream& operator <<(ostream& outStream, const Truck& object);
};

istream& operator >>(istream& inStream, Truck& object) {
cout << endl << "Insert truck: "; inStream >> object;
cout << "Insert load capacity: "; inStream >> object.loadCapacity;
cout << "Insert towing capacity: "; inStream >> object.towingCapacity;
return inStream;
}

ostream& operator <<(ostream& outStream, const Truck& object) {
outStream << object;
outStream << endl << "Load capacity: " << object.loadCapacity;
outStream << endl << "Towing capacity: " << object.towingCapacity;
return outStream;
}

当我尝试使用

Truck object;
cin >> object;
cout << object

结果并不像我想的那样。谁能解释为什么?谢谢

最佳答案

inStream >> objectoutStream << object都是递归调用,因为 object 的静态类型是Truck , 不是 Vehicle .使用虚拟 printget Truck 的方法覆盖。调用object.print(outStream)在插入器和object.get(inStream)在提取器中以通过继承实现多态 I/O:

class Vehicle {
private:
string manufacturer;
int cylinder;
Person owner;
public:
Vehicle();
Vehicle(const Vehicle& theObject);
virtual void print(std::ostream& os) const {
os << manufacturer << cylinder << owner;
}
virtual void get(std::istream& is) {
is >> manufacturer >> cylinder >> owner;
}
};

class Truck : public Vehicle {
private:
double loadCapacity;
int towingCapacity;
public:
Truck();
Truck(const Truck& object);
void print(std::ostream& os) const {
Vehicle::print(os);
os << loadCapacity << towingCapacity;
}
void get(std::istream& is) {
Vehicle::get(is);
is >> loadCapacity >> towingCapacity;
}
};

std::istream& operator>>(std::istream& inStream, Vehicle& object) {
object.get(inStream);
return inStream;
}

std::ostream& operator<<(std::ostream& outStream, const Vehicle& object) {
object.print(outStream);
return outStream;
}

关于c++ - 在 C++ 中使用继承类流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29677467/

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