gpt4 book ai didi

c++ - 派生类中的运算符重新定义但仍在使用父类

转载 作者:太空狗 更新时间:2023-10-29 21:07:06 27 4
gpt4 key购买 nike

具体来说,我希望能够使用 ostream operator <<在一个基类的两个派生类中。

我正在创建的程序应该打印出“虚拟商店”中各种“产品”的产品详细信息。这些产品中有两种不同的书籍。这些书中的每一本书都应该拥有自己的:

ID number
Author
NumberOfPages
Year

此外,键入 ChildrensBook需要保持最低年龄,并且TextBook需要保持成绩。

我定义了类 Book并从中派生类 ChildrensBookTextBook .我的问题是关于使用 ostream operator <<打印信息。

我可以在 Book 类中定义一个通用的 << 函数,它会打印出两个派生类共有的所有信息,然后在派生类中重新定义 << 时引用它吗?

例如,

//The parent class

ostream& operator<<(ostream& bookOutput, const Book& printBook) {
return bookOutput << printBook.ID << "Name " << printBook.name << "year:" << printBook.year";
}

然后在派生类中以某种方式:

//The derived classes
ostream& operator<<(ostream& TextBookOutput, const TextBook& printTextBook) {
return TextBookOutput << "TextBook: "
<< "[Here is where I want to print out all the details of the book that are members of the base class]" << "Grade:" << printTextBook.grade;
}

所以我想我的问题可以概括为:我可以从子运算符中调用父运算符吗?如果可以,我应该使用什么语法?

我想到的另一个想法是为使用父打印运算符的子项编写一个函数,然后从子项的打印运算符中调用该函数。这意味着我在重新定义运算符时并没有尝试调用它,但仍然要求使用父运算符并单独重新定义子运算符。

最佳答案

当然可以。

Book 有一个运算符,所以使用它。您可以通过为它提供对一本书的引用来调用它,并且您可以使用多态性的强大功能来获取对基的引用。

ostream& operator<<(ostream& TextBookOutput, const TextBook& printTextBook) {
return TextBookOutput << "TextBook: " << static_cast<const Book&>(printTextBook) << "Grade:" << printTextBook.grade;
}

关于c++ - 派生类中的运算符重新定义但仍在使用父类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5935698/

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