2013-07-26 4 views
0

У меня есть 3 класса, которые происходят друг от друга - GameScreen - это базовый класс, из которого вызывается MenuScreen. Затем у меня есть третий класс «TitleScreen», который происходит из «MenuScreen».Наследование многоуровневого класса с несогласованными конструкторами

Поток в основном из базового класса: «GameScreen» -> «MenuScreen» -> «TitleScreen»

Базовый класс «GameScreen» не имеет параметров в его конструктор, как мудр «TitleScreen», однако мне нужен параметр для «MenuScreen». Я в настоящее время есть файлы заголовков, как:

GameScreen.h

class GameScreen 
{ 
public: 
    GameScreen(); 
} 

MenuScreen.h

class MenuScreen : public GameScreen 
{ 
public: 
    MenuScreen(std::string title); 
} 

TitleScreen.h

class TitleScreen : public MenuScreen 
{ 
public: 
    TitleScreen(std::string title) : MenuScreen(title); 
} 

То, что я с трудом пытается понять, если это возможно в C++ (я следую примеру C# для Game State Management, который делает это). Чтение через наследование классов в некоторых книгах, которые у меня есть, охватывает только параметры, унаследованные от базового класса, поскольку мой базовый класс образца не имеет параметров.

+3

Да, он работает точно так же, как вы написали - за исключением того, что вы должны вызывать конструктор MenuScreen в реальной реализации, а не в объявлении конструктора. – jlahd

ответ

1
  1. После каждой декларации класса вам не хватает ;.

  2. Если вы пишете TitleScreen(std::string title) : MenuScreen(title) вы определяете тело метода, но тело не хватает ... так что вы должны положить просто объявление в свой TitleScreen.h:

    class TitleScreen : public MenuScreen 
    { 
    public: 
        TitleScreen(std::string title); 
    }; 
    

    , а затем поместить тело конструктор для TitleScreen.cpp:

    #include "TitleScreen.h" 
    
    TitleScreen::TitleScreen(std::string title) : MenuScreen(title) 
    { 
        // .. 
    } 
    

Edit: исправлена ​​терминология accordint к this question.

+0

Вы вводите в заблуждение декларацию с терминологией определения. И стоит также упомянуть, что оба могут идти вместе, как на C#, или отдельно, как в вашем примере, возможно, с плюсами и минусами. –

+0

Спасибо за разъяснение! –

Смежные вопросы