私はdogsというクラスを持ち、それを継承しているshepherdというクラスを継承しているとしましょう。今はベースクラスのストリーミング演算子をオーバーロードします。私の派生クラスのためにストリーミング演算子をオーバーロードしています。私は、元のクラスの元々の変数も出力したいと思います。派生クラスのストリーミング演算子も基本クラスを出力する方法
明らかに、ベースクラスのストリーミング演算子のオーバーロードに使用されるコードを貼り付けることができますが、大量のコードをコピーすることを含まないより洗練されたソリューションを探していました(特に、基底クラスの内部)。
例です。
class Dogs
{
public:
int N_legs;
bool hair_short;
};
class Shepherd : public Dogs
{
public:
bool guarding;
};
std::ostream &operator<<(std::ostream &os, Dogs dogs)
{
os << "the content of class dogs" << std::endl;
os << dogs.N_legs << "\t" << dogs.hair_short << std::endl;
return os;
}
私は動的キャストを試みましたが、うまくいきませんでした。メイン
Dogs dogs;
dogs.N_legs = 4;
dogs.hair_short = true;
std::cout << dogs << std::endl;
Shepherd shepherd;
shepherd.N_legs = 4;
shepherd.guarding = true;
std::cout << shepherd << std::endl;
で
std::ostream &operator<<(std::ostream &os, Shepherd shepherd)
{
os << dynamic_cast<Dogs>(shepherd);
os << "The content of class shepherd" << std::endl;
os << shepherd.guarding << std::endl;
return os;
};
どこかはさて、これは私だけ(あなたが動的キャストをコメントアウト)派生クラス変数で構成された出力が得られますが、私もコンテンツを持っていると思います基本クラスの
あなたは*参照のポインタを使用する必要が動作するように*。代わりに参照*を引数として出力演算子*に渡してみてください。好ましくは定数参照(つまり、それぞれconst Shepherd& 'const Dogs&') –