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;

のパラメータの 1 つを変更すると、 のパラメータも同じものに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 に答える