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