访问“父”或“所有者”函数C ++

问题描述 投票:0回答:1

我有一个班级,Game,在论证中有另一个类的std::vectorCase。在这个类Case中,我有一个函数告诉我什么时候点击它。当我按下Game时,我想向我的对象Cases发送信号,Case拥有class Game { public: Game(); void doSomething(); private: std::vector<Case> board; }; 。在game.h中:

class Case
{
    public:
        Case(Game &g);
        void functionWhichIsCalledWhenCaseIsPressed();
    private:
        Game game;
};

在case.h中:

functionWhichIsCalledWhenCaseIsPressed()

因此,当调用doSomething()时,我想调用函数Case c;。编辑:

我试过了,但是我还需要用向量创建一个案例......实际上,我在Game.h中有一个c = Game(*this); ...我无法初始化它...我试过error: object of type 'Case' cannot be assigned because its copy assignment operator is implicitly delete 但我有一个错误:

Case

编辑:谢谢,它完成了!

c++ relationship class-design ownership-semantics
1个回答
1
投票

为此,您需要启用从Game到其拥有的class Game; class Case { public: Case(Game& x); void functionWhichIsCalledWhenCaseIsPressed(); private: Game &game; // <<<<-------------- reference to owner }; 的导航。一种方法是在每个Case中保留一个引用或指向所有者的指针,并在构造时初始化此引用:

Case::Case(Game& x) : game(x){
}
void Case::functionWhichIsCalledWhenCaseIsPressed() {
    cout<<"Clicked"<<endl; 
    game.doSomething();    //<<<===== invoke the function of the owner
}

有了这些先决条件,您可以轻松调用父项的功能:

Game::Game() {
    for (int i=0; i<10; i++)
        board.push_back(Case(*this));
}
void Game::doSomething() { cout<<"click on game"<<endl; }

这要求游戏初始化棋盘并为构造函数提供正确的参数:

Online demo

qazxswpoi

© www.soinside.com 2019 - 2024. All rights reserved.