Я пытался найти ответ на этот вопрос, но, похоже, ни у кого нет такой же проблемы, как у меня.
Я работаю с несколькими производными классами.Оператор ostream << для каждого из них должен распечатать некоторые общие для каждого, а некоторые специфические для каждого.Позже я хотел бы продолжить производные от этих производных классов, и снова новые производные классы должны распечатать некоторые вещи, которые находятся в «поколениях» над ними. <br>Например:
The Baseфайл класса .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
, но мой профессор (тот, кто написал задание и поэтому не будет помогать нам с этим), сказал, что есть лучший способсделай это.Есть предложения?