#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;
}
在这段代码中(简化说明我的问题)我想访问会员变量money,在公司内部增加一个人的钱。但是,p.money + =金额似乎只在本地工作,并且不会改变主要特定人员的金钱价值。
使这项工作有哪些方法?是否可以将钱作为受保护的成员变量?
答案 0 :(得分:3)
该函数应该通过引用接受该对象
void pay_salary( Person &p, int amount);
^^^^^^^^^
否则该函数处理Person类型对象的副本。
您可以使数据成员money
成为私有或受保护(假设该类也是最终类),但您必须定义一个更改对象的访问者。
例如
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; }