Наследование и переопределение оператора ostream в C ++

Я пытался найти ответ на этот вопрос, но, похоже, ни у кого нет такой же проблемы, как у меня.

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

7
задан skaffman 17 May 2011 в 06:59
поделиться