#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; }

10-05 20:46
查看更多