【问题标题】:Friend function how can i change their members globally朋友功能我如何在全球范围内更改他们的成员
【发布时间】:2020-05-10 18:33:13
【问题描述】:

如何在全局范围内更改好友函数的成员,而不仅仅是在其块内?我有一个简单的例子:

预期输出(整数): 45 35 35

#include<iostream>
using namespace std;

class dog
{
    private:
        int HealthPoints;
        int Damage;
    public:
    dog(int HealthPoints, int Damage){
        this->HealthPoints = HealthPoints;
        this->Damage = Damage;
    }
    friend void doAttack(dog,dog);
    int getHealthPoints(){return HealthPoints;}
    int getDamage(){return Damage;}
};

void doAttack(dog Attacker, dog Attacked){
    Attacked.HealthPoints = Attacked.HealthPoints - Attacker.Damage;
    cout << Attacked.HealthPoints << "\tvalue inside friend function" << endl;
}

int main()
{
    dog a(45, 10);
    dog b(45, 10);
    cout << b.getHealthPoints() << "\tvalue before friend function" << endl;
    doAttack(a, b);
    cout << b.getHealthPoints() << "\tvalue after friend function";
    return 0;
}

【问题讨论】:

  • 通过引用获取您的参数,否则您将在函数内部拥有一个副本。您应该实现 setter 成员函数而不是使用友元函数。

标签: c++ class global-variables friend-function


【解决方案1】:

你不想要全局变量。您目前正在做的是按值传递 AttackerAttacked - 例如复制它们。您在doAttack 中对这些副本进行更改。原件永远不会被修改。而是通过引用传递它们。

我也更改了您的函数名称以更友好。随意改回来。

void doPet(dog& Petter, dog& Petted) {
    Petted.LovePoints = Petted.LovePoints + Petter.Friendliness;
    cout << Petted.LovePoints << "\tvalue inside friend function" << endl;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2015-11-24
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    相关资源
    最近更新 更多