#include <iostream>
#include <string>
using namespace std;
class Person
{
private:
string name;
public:
Person(string _name, int _money) : name(_name), money(_money) {}
int money;
int get_money() {return money; }
};
class Company
{
private:
string name;
public:
Company(string _name) : name(_name) {}
void pay_salary(Person p, int amount);
};
void Company::pay_salary(Person p, int amount)
{
p.money += amount;
}
int main()
{
Person bob("Bob", 0);
Company c("C");
cout << bob.get_money() << endl; // prints 0
c.pay_salary(bob,100);
cout << bob.get_money() << endl; // prints 0
return 0;
}
在此代码中(简化以说明我的问题),我想访问Company内部的成员变量money,以增加Person的资金。但是,p.money + =金额似乎仅在本地运行,而不会更改主要货币对特定人的货币值(value)。
有什么方法可以使这项工作?有可能使货币成为 protected 成员变量吗?
最佳答案
函数应通过引用接受对象
void pay_salary( Person &p, int amount);
^^^^^^^^^
否则,该函数将处理Person类型的对象的副本。
您可以将数据成员
money
设为私有(private)或 protected (前提是该类也不是最终类),但是必须定义一个访问器来更改对象。例如
void set_money( int money ) {this->money = money; }
在这种情况下,您也可以写
void Company::pay_salary(Person &p, int amount)
{
p.set_money( p.get_money() + amount );
}
最好用限定符
get_money
声明成员函数const
。在这种情况下,它可以用于类Person的常量对象。int get_money() const {return money; }