2013-07-26 66 views
0

我有3个派生自另一个类的类 - GameScreen是MenuScreen派生自的基类。然后我有一个来自'MenuScreen'的第三类'TitleScreen'。具有不一致构造函数的多级别类继承

的流程基本上从基类:“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#样本的游戏状态管理这样做)。通过一些书中的类继承来阅读,我只有覆盖从基类继承的参数,因为我的示例基类没有参数。

+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) 
    { 
        // .. 
    } 
    

编辑:固定的术语accordint到this question

+0

您在声明和定义术语混淆。另外值得一提的是,两者可以像C#一样放在一起,或者像你的例子那样分开,可能有利弊。 – 2013-07-26 18:56:33

+0

感谢您的澄清! –