具体来说,我希望能够ostream
operator <<
在一个基类的两个派生类中使用。
我正在创建的程序应该打印出“虚拟商店”中各种“产品”的产品详细信息。产品中有两种不同的书籍。这些书中的每一本书都应该拥有自己的:
ID number
Author
NumberOfPages
Year
此外,typeChildrensBook
需要持有最低年龄,并且TextBook
需要持有一个等级。
我定义了类Book
并从它派生了类ChildrensBook
和TextBook
. 我的问题是关于使用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;
}
所以我想我的问题可以总结为:我可以从子运算符中调用父运算符吗?如果可以,我使用什么语法?
我想到的另一个想法是为使用父打印运算符的孩子编写一个函数,然后从孩子的打印运算符中调用该函数。这意味着我在重新定义运算符时并没有尝试调用它,但仍然要求使用父运算符并单独重新定义子运算符。