3

ostream operator <<具体的には、基本クラスから 2 つの派生クラスを使用できるようにしたいと考えています。

私が作成しているプログラムは、「仮想ストア」のさまざまな「製品」の製品詳細を印刷することになっています。製品の中には、2 種類の本があります。これらの各本は、独自のものを保持することになっています。

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;
}

したがって、私の質問は次のように要約できると思います: 子演算子内から親演算子を呼び出すことはできますか? もしそうなら、どの構文を使用すればよいですか?

私が思いついたもう 1 つのアイデアは、親の print 演算子を使用する子用の関数を作成し、子の print 演算子内からその関数を呼び出すことです。つまり、再定義中にオペレーターを呼び出そうとしたのではなく、親オペレーターを使用し、子オペレーターを個別に再定義する必要があります。

4

3 に答える 3

4

もちろん。

s の演算子があるBookので、それを使用します。本への参照を与えることで呼び出すことができ、ポリモーフィズムの力を利用してベースへの参照を取得できます。

ostream& operator<<(ostream& TextBookOutput, const TextBook& printTextBook) {
    return TextBookOutput << "TextBook: " << static_cast<const Book&>(printTextBook) << "Grade:" << printTextBook.grade;
}
于 2011-05-09T10:46:59.713 に答える
0
return TextBookOutput << static_cast<Book const &>(printTextBook) << ...
于 2011-05-09T10:41:40.163 に答える