gpt4 book ai didi

c++ - 给定一个基类作为参数,如果传递了一个,如何使用 op<< 重载来打印派生类的特征?

转载 作者:行者123 更新时间:2023-11-30 02:00:14 26 4
gpt4 key购买 nike

这是家庭作业。

我有一个基类 Item 和一个派生类 Book。

我在 Item 类中重载了 op<<:

ostream& operator<<(ostream& out, const Item* const item)
{
out << item->getName() << endl;
return out;
}

以及在 Book 类中:

ostream& operator<<(ostream& out, const Book* const b)
{
out << b->getPages() << endl;
return out;
}

但是,当我运行我的代码时,只使用了 Item 运算符,它不会打印书籍的页面。我已经确保打印了一本“书”,而不仅仅是基类。从我读过的 Material 看来,重载基类和派生类的运算符似乎是你应该做的,所以我不确定为什么我的书信息没有被打印出来。

最佳答案

您可以使用多态而不是重载:向类添加虚拟打印方法:

class Item
{
public:
virtual void print(std::ostream& o) const
{
out << getName() << endl;
}
....
};

class Book : public Item
{
public:
virtual void print(std::ostream& o) const
{
out << getPages() << endl;
}
....
};

然后使用单个 ostream& operator<< :

ostream& operator<<(ostream& out, const Item& item)
{
item.print(out);
return out;
}

然后

Item* i1 = new Item(....);
Item* i2 = new Book(....);
std::cout << *i1 << " " << *i2 << std::endl;
delete i1;
delete i2;

关于c++ - 给定一个基类作为参数,如果传递了一个,如何使用 op<< 重载来打印派生类的特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15392673/

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