c ++嵌套类访问

时间:2016-08-29 16:06:59

标签: c++ class scope state

以下是一个简化的头文件,详细说明了三个类。我希望能够将指针保持在我的游戏中#34; class private,并允许简介修改它。但是,这是不行的。由于Introduction是GameState的衍生物,我以为我能够修改这个指针?实例表明这是可能的。我真的不想把它移到游戏中的公共空间。

class Introduction;
class Game;
class GameState;

class GameState
{
    public:

    static Introduction intro;

    virtual ~GameState();
    virtual void handleinput(Game& game, int arbitary);
    virtual void update(Game& game);

};


class Introduction : public GameState
{
public:

    Introduction();

    virtual void handleinput(Game& game, int arbitary); 

    virtual void update(Game& game);

};


class Game
{
public:

    Game();

    ~Game();

    virtual void handleinput(int arbitary);

    virtual void update();

private:

    GameState* state_;

};

我跟随的例子就在这里...... http://gameprogrammingpatterns.com/state.html

编辑:我想做这样的事情......

void Introduction::handleinput(Game& game, int arbitary) 
        {
            if (arbitary == 1)
            std::cout << "switching to playing state" << std::endl;
            game.state_ = &GameState::play;
        }
编辑:感谢您的回复,我认为吸气剂和制定者是可行的方法。我很抱歉问题不明确。 问题是我不理解我试图遵循的实现。我仍然不理解它,但很明显有办法完成同样的事情。

3 个答案:

答案 0 :(得分:1)

吸气器和装定者怎么样?

class Game
{
public:

   ....
   GameState * getGameState() const { return state_; }

   void setGameState(GameState * newState) { state_ = newState; }

   ....

private:

    GameState* state_;
}

答案 1 :(得分:1)

我看到两种可能的解决方案。

使用朋友类

您可以在require班级中声明friend个班级。

类似的东西:

Game

通过这种方式,类class Game { public: // ... private: // ... friend class Introduction; }; 将能够访问Introduction类的私有成员并对其进行修改。

Getters And Setters

如果您想保留数据隐藏原则,您只需提供公共成员即可修改游戏状态。

这里有一个例子:

Game

答案 2 :(得分:0)

您可以使指针保护并使Game成为GameState的朋友,以允许Game访问GameState中的受保护成员。 但正如上面的评论所表明的那样,它实际上并不是很清楚。