访问和更改其他类

时间:2016-11-17 18:40:07

标签: c++ class oop

#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 + =金额似乎只在本地工作,并且不会改变主要特定人员的金钱价值。

使这项工作有哪些方法?是否可以将钱作为受保护的成员变量?

1 个答案:

答案 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; }