c ++如何跨多个类更改同一个对象?

时间:2016-07-29 18:48:01

标签: c++ class pointers object

Noobie在这里。我试图在多个类中对Player对象mainCharacter进行更改。我目前有一个Player对象声明如下所示。 Player能够传送到各种世界并与怪物战斗。

所有代码都有效。一旦一个世界的敌人被击败,他们就会被击败。我的问题是当他传送到另一个世界时,Player的统计数据都被重置为默认值;即使在前世界遭受敌人的伤害之后,他仍然拥有完整的生命值。

如何跨多个类或世界对同一个Player对象进行更改?我认为我的申报中存在问题,但我不确定。我很感激任何意见。谢谢!

声明mainCharacter对象的位置:

class SpaceList
{
    protected:
        class SpaceNode
        {
            friend class SpaceList;
            Player mainCharacter;
            Space* thisSpace;
            SpaceNode* next;
            SpaceNode(int m, SpaceNode* next1 = NULL)
            {
                if(m == 0)
                {
                    thisSpace = new EntranceHall(&mainCharacter);
                }
                else if(m == 1)
                {
                    thisSpace = new WaterSpace(&mainCharacter);
                }

Player.hpp的一部分:

class Player: public Interactable
{
    protected:
        Backpack myBackpack;
    public:
        Player();
        virtual interactableType getInteractableType();
        virtual int interact();
        virtual int attack();
        virtual void defend(int);

Player.cpp的一部分:

Player::Player()
{
    healthPoints = 10;
    numberOfAttackDice = 1;
    sidesOfAttackDice = 6;
    numberOfDefendDice = 1;
    sidesOfDefendDice = 6;
}

mainCharacterEntranceEntrance.cpp)开始:

EntranceHall::EntranceHall(Interactable* mainCharacter)
{
    interactableGrid[6][3] = mainCharacter;
    interactableGrid[0][3] = new Portal(0);//entrance portal
    interactableGrid[3][3] = new InterestPoint(0);//stone mural
}

mainCharacter可能会传送到水世界,默认值重置(Waterspace.cpp):

WaterSpace::WaterSpace(Interactable* mainCharacter)
{
    interactableGrid[3][0] = mainCharacter;
    interactableGrid[3][3] = new Boss(this->getSpaceType());

1 个答案:

答案 0 :(得分:6)

删除SpaceNodePlayer之间的has-a关系 - 在外面某处创建Player的实例并使用指针来引用它,就像您习惯的那样。或者只是将其设为static,以便只有一个实例不会被重建(或者为每个SpaceNode单独构建)。

注意:

  • 不要自己实现链表,这个数据结构甚至不适合这里。试试std::vector

  • 更好地切换到智能指针。你甚至可能在不知情的情况下泄露记忆。