我一直在努力寻找答案,但似乎没有人遇到与我完全相同的问题。
我正在使用几个派生类。每一个的 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;
};
第二个.cpp:
FirstDerived::operator << (ostream& os)
{
os <<
FirstDerived::operator<<
<< "The third number is "
<< ThirdClassNumber;
}
我认为问题很可能是程序一开始的声明,或者像Base::operator<<
.
另一种可能性是我没有在每个继承类的 .h 文件中重新声明它。我应该是,如果是,我应该使用什么语法?
有人建议我使用这种static_cast
方法,但我的教授(写作业的人,因此不会给我们太多帮助)说有更好的方法来做。有什么建议么?