【发布时间】: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