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

c++ How to make changes to the same object across multiple classes?

本文关键字:对象 何跨多 c++      更新时间:2023-10-16

这里没有。我正在尝试跨多个类对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;
}

mainCharacterEntrance开始(Entrance.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());

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


注:

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

  • 最好改用智能指针。你可能在不知情的情况下泄露了内存。