c++ 如何使用函数更改对象的属性?

gijlo24d  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(176)

如果标题不够具体的话,请原谅我。假设我想制作一个RPG。我为角色创建了一个类。然后我创建了一个数组,作为一个团队的角色。然后我有一个函数,减少团队中第一个成员的HP。
`

#include <iostream>
#include <string>

class Chara
    {
    public:
        int HP;
        Chara(int health)
        {
            HP = health;
        }
    };

int Battle(Chara Party[2])
    {
        Party[0].HP -= 2;
    }

int main()
{
    Chara Final(0);
    Chara Fantasy(7);

    Chara Player[2] = {Final, Fantasy};

    Battle(Player);
    std::cout << Final.HP;
}

`
“但是,角色的血量是不变的,有没有办法让角色的血量发生变化?”

ie3xauqp

ie3xauqp1#

C++通过复制传递结构导致了两个不同的问题。
首先,Chara Player[2] = {Final, Fantasy};行创建了一个Chara数组,并使用上述变量的 * 副本 * 初始化成员。这意味着最后一行不会看到对Player元素所做的任何修改。相反,您应该执行以下操作:

Chara Player[2] = { Chara{0}, Chara{7} };
// and optionally, if you still want to access individual members:
Chara& Final = Player[0];
Chara& Fantasy = Player[1];

其次,通过copy将Player传递给Battle函数。因此,在函数内部对Party所做的任何更改都不会反映到外部的Player变量中。快速修复方法是通过指针来获取Party

void Battle(Chara* Party) { ... }

这是因为数组在传递时可以衰减为指向其第一个元素的指针。
作为最佳实践,您可能应该使用std::vector,它允许您动态地添加和删除团队成员,并具有各种有用的方法。

相关问题