В частности, я хотел бы иметь возможность использовать ostream
operator <<
в двух производных классах от базового класса.
Программа, которую я создаю, должна распечатывать информацию о товарах для различных "товаров" в "виртуальном магазине". Среди продуктов есть два разных вида книг. Каждая из этих книг должна иметь свои собственные:
ID number
Author
NumberOfPages
Year
Кроме того, тип ChildrensBook
должен содержать минимальный возраст, а TextBook
- класс.
Я определил класс Book
и вывел из него классы ChildrensBook
и TextBook
. Мой вопрос касается использования ostream
operator <<
для распечатки информации.
Могу ли я определить универсальную функцию << в классе Book, которая будет распечатывать всю информацию, общую для обоих производных классов, и затем обращаться к ней в переопределении << в производных классах? </p>
Например,
//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;
}
Итак, я думаю, что мой вопрос можно сформулировать так: могу ли я вызвать родительский оператор из дочернего оператора, и если да, какой синтаксис я использую?
Другая идея, которая пришла мне в голову, - написать функцию для дочернего элемента, которая использует родительский оператор печати, а затем вызвать эту функцию из дочернего оператора печати. Это означало бы, что я не пытался вызвать оператор при его переопределении, но по-прежнему требует использования родительского оператора и отдельного переопределения дочернего оператора.