私はこれに対する答えを見つけようとしていますが、私とまったく同じ問題を抱えている人は誰もいないようです.
私はいくつかの派生クラスを扱っています。これらのそれぞれの ostream 演算子 << は、それぞれに共通するものと、それぞれに固有のものを出力する必要があります。後で、これらの派生クラスからさらに派生させたいと思います。また、新しい派生クラスは、その上の「世代」にあるものを出力する必要があります。
例えば:
基本クラスの .h ファイル
class Base
{
int FirstClassNumber;
//The declaration I'm currently working with, that a friend gave me
//I'm pretty sure my problem lies here.
public:
friend ostream& operator << (ostream& os, const Base &base)
{
base << os ;
return os;
}
virtual void operator << (ostream& os) const = 0;
};
Base.cpp ファイルには、次の行が含まれています。
void Base::operator << (ostream& os)
{
os << FirstClassNumber;
}
次に、次を導出します: (FirstDerived.h)
class FirstDerived : Public Base
{
int SecondClassNumber;
};
FirstDerived.cpp:
FirstDerived::operator << (ostream& os)
{
os <<
"The first Number is:
//This is the line that isn't working - someone else gave me this syntax
<< Base::operator<<
<< "The second number is"
<< SecondClassNumber;
}
次に、導出したい:
class SecondDerived: Public FirstDerived
{
int ThirdClassNumber;
};
Second.cpp:
FirstDerived::operator << (ostream& os)
{
os <<
FirstDerived::operator<<
<< "The third number is "
<< ThirdClassNumber;
}
問題は、プログラムの最初の宣言か、のような行のいずれかである可能性が高いと思いますBase::operator<<
。
別の可能性は、継承されたすべてのクラスの .h ファイルで再宣言していないことです。そうすべきですか、そうであれば、どの構文を使用すればよいですか?
この方法を使用するように提案されましたstatic_cast
が、私の教授 (課題を書いた人であり、そのために私たちにあまり助けを与えない人) は、それを行うためのより良い方法があると言いました。助言がありますか?