Я пытался найти ответ на этот вопрос, но, кажется, ни у кого нет точно такой же проблемы, как у меня.
Я работаю с несколькими производными классами. Оператор 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;
};
Первый производный.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
, но мой профессор (тот, кто написал задание, и поэтому не будет нам слишком сильно помогать с ним) сказал, что есть лучший способ сделать это. Какие-либо предложения?