2

重载 = 运算符后,

const Warrior& Warrior::operator = (const Warrior& warriorObj)
{
if (this != &warriorObj)
{
    name = warriorObj.name;
    start = warriorObj.start;
    alignment = warriorObj.alignment;
    strength = warriorObj.strength;
    craft = warriorObj.craft;
    gold = warriorObj.gold;
    life = warriorObj.life;
    fate = warriorObj.fate;
    specialAbility = warriorObj.specialAbility;
    numberOfObjects = warriorObj.numberOfObjects;       
}
    return *this;
}

一旦我在驱动程序中创建了 2 个勇士:

    Warrior *w1, *w2;

    w1 = new Warrior();
    w2 = new Warrior();

    w1 = w2;

如果我更改 的参数之一w1,它也会将 的参数更改为w2相同的东西...

我哪里做错了?

4

3 回答 3

11

由于您正在分配指针,因此不会调用重载运算符。您可以使用

*w1 = *w2;

或者,更好的是,根本不使用动态对象:

Warrior w1, w2;
w1 = w2;
于 2012-11-27T19:18:43.807 回答
1

w1 = w2;是一个指针赋值——operator=你重载的不是在这里调用

于 2012-11-27T19:19:02.330 回答
0

您正在为彼此分配指针,而不是类实例,因此在您的代码中实际上永远不会调用重载运算符。

于 2012-11-27T19:19:27.987 回答