(C ++)指向不同类中对象的指针

时间:2018-03-19 03:47:52

标签: c++ c++11 pointers visual-c++ member-function-pointers

大家。我正在为学校做一个最终的项目,并且它很好,但是我试图使用指针指针时遇到了一些问题。我会尽力解释下面的问题:

所以我有一个名为Player的类,看起来像这样:

class Player
{
    Player();
    int health;
    void adjustHealth(int);
};

Player::Player()
{
    health = 40;
}

void Player::adjustHealth(int adjust)
{
    health += adjust;
}

我有另一个名为Shelter的类,包括“Player.h”,看起来有点像这样:

class Shelter
{
    Shelter();
    Player* player;     // Create a pointer to Player class.
};

在Shelter头文件中,我的默认构造函数中包含以下内容:

Shelter::Shelter()
{
    ...Other code here.
    player = new Player();
}

在Shelter头文件中,我将这个新玩家用于:

 player->adjustHealth(-1);  // Subtract one health from the player.

哪个效果很好。

我面临的问题是创建另一个名为Church的类,它位于一个单独的头文件中,并作为游戏中的一个单独位置。我希望教会使用与Shelter相同的玩家,所以它具有所有相同的统计数据等,而不是在Church中创建一个新玩家(这是我在Shelter.h中所做的)。

现在,我有类似的东西:

class Church
{
Church();
Shelter **cplayer; // This is supposed to be the pointer to the pointer.
};

默认构造函数是我遇到问题的地方。我想使用Shelter的同一个玩家,而不是像我在Shelter那样创建一个新玩家。

Church::Church
{
    What should I do here?
}

我尝试了很多东西,但我无法让它发挥作用。最终我希望能够做到这样的事情:

   player->adjustHealth(-1);    // Subtract one health from the player. 

只有在教会中,无论身处哪个位置,都可以调整玩家的状态,如健康状况。

我希望我的问题有道理。如果没有,我可以尝试更好地澄清。无论如何,提前谢谢。

1 个答案:

答案 0 :(得分:0)

  

我面临的问题是创建另一个名为Church的类,它位于一个单独的头文件中,并作为游戏中的一个单独位置。我希望教会使用与Shelter相同的玩家,所以它具有所有相同的统计数据等,而不是在教会中创建一个新玩家

这听起来像是使用std::shared_ptr的理想情况。

class Shelter
{
    Shelter();
    std::shared_ptr<Player> player;     // Create a pointer to Player class.

    // Provide a public accessor
    public:
       std::shared_Ptr<Player> getPlayer() const { return player; }
};

class Church
{
    Church(std::shared_ptr<Player> pl) : player(pl) {}
    std::shared_ptr<Player> player;

    // You haven't explained in your post why you need this.
    // Maybe you don't need it.
    // Shelter** shelter;
};