我一直在努力寻找答案,但似乎没有人有和我完全相同的问题。
我正在使用几个派生类。每个派生类的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
方法,但是我的教授 (写了这项任务并且不会给我们太多帮助) 说有更好的方法。 有什么建议吗?