c++ - 访问 "parent"或 "owner"函数 C++

标签 c++ relationship class-design ownership-semantics

我有一个类 Game,它的参数是另一个类 Casestd::vector。在这个类 Case 中,我有一个函数,当我们点击它时它会告诉我。当按下 Case 时,我想向拥有 Cases 的对象 Game 发送信号。 在 game.h 中:

class Game
{
public:
    Game();
    void doSomething();

private:
    std::vector<Case> board;
};

在 case.h 中:

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

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

我试过了,但我还需要从 vector 中创建一个案例...实际上,我的 Game.h 中有一个 Case c;...而且我无法初始化它。 .. 我试过 c = Game(*this); 但我有一个错误:

error: object of type 'Case' cannot be assigned because its copy assignment operator is implicitly delete

编辑:谢谢,完成了!

最佳答案

为此,您需要启用从 Case 到它所属的 Game 的导航。一种方法是在每个 Case 中保留一个指向所有者的引用或指针,并在构造时初始化此引用:

class Game; 
class Case
{
    public:
        Case(Game& x);
        void functionWhichIsCalledWhenCaseIsPressed();
    private: 
        Game &game;  // <<<<-------------- reference to owner
};

有了这些先决条件,你可以很容易地调用父函数:

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

关于c++ - 访问 "parent"或 "owner"函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55249751/

相关文章:

c++ - 有没有办法在 C 头文件中禁用全局标识符?

c++ - 绳索数据结构的拆分操作

ruby-on-rails - Rails,如何避免 "N + 1"查询关联中的总数(计数、大小、counter_cache)?

database - 无法使用 Doctrine 从表文章中获取用户

php - Laravel 多对多关系 - 检索模型

java - 如何访问继承中的私有(private)字段

C++ 单例/事件对象范例

c++ - 以编程方式安装 Microsoft 虚拟硬盘驱动器 (VHD)

c++ - 如何将 C++/Cli 项目链接到 native C++ 静态库

c++ - 关于何时在 C++ 类中显式启用/禁用复制的指南?