オペレーターのオーバーロードによる印刷に問題があります。現在、Item クラスを基本クラスとして含むデータベースを作成しています。Item から派生したクラスは、Movie、Book、および MusicAlbum です。ライブラリに本を挿入する方法の例を次に示します。
Item *item;
cout << ">>>>>> adding items to library:" << endl << endl;
item = library->addBook("The Curious Incident of the Dog in the Night-Time", "Mark Haddon", 240);
if (item != NULL) {
library->addKeywordsForItem(item, 2, "autism", "Asperger's Syndrome");
cout << item << endl;
}
addBook はクラス Library で定義されている関数であり、addKeywordsForItem も同様です。私の問題は次の行です: cout << item << endl;
これを行うには、ストリーミング << 演算子をオーバーロードする必要があることは理解していますが、メイン関数 (上記のコードの元) には、映画や音楽アルバムを追加するための同様の関数も含まれています。ストリーミング演算子をオーバーロードする関数は基本クラスにあり、次のように基本クラス ポインターをパラメーターとして受け取ります。
ostream& operator<<(ostream& out, const Item* item);
本の場合、タイトル、著者、ページ数、およびキーワードを出力する必要があります。映画や音楽アルバムの場合、それらから印刷する特定のものもあります。
ストリーミング演算子をオーバーロードする基本クラスの 1 つの関数だけを使用して、必要な情報を出力するにはどうすればよいですか? 基本クラスのポインターが Book、Movie、または MusicAlbum のインスタンスを参照しているかどうかに関係なく? 前もって感謝します。