通过引用传递对象? C ++

时间:2015-10-04 07:21:24

标签: c++ pointers pass-by-reference

我正在尝试创建一些可以连接“电池”的“设备”。 设备应该能够使用 _drill.Connect(_battery);

将电池连接到自身

设备运行时电池应该耗尽( _drill.Operate()),但我发现电池的值没有变化。

我做了一些测试,我想我已经发现我正在创建一个我正在传递给Connect()方法的电池副本。我不太确定指针/传递引用是如何在C ++中起作用的,我发现自己有点迷失看样例。

我的连接方法;

void Device::Connect(Battery& battery)
{
    _battery = battery;
}

我的操作功能;

void Drill::Operate()
{
    cout << "VRMM! VRMM!" << endl;

    //Battery drain by 10 units
    this->getBattery().Drain(10);
}

我不会解释行为,而是附上我的测试代码和输出。

Battery _battery;
Drill _drill;

cout << _battery.GetCharge() << endl;
_drill.Connect(_battery);

cout << "Battery charge: " << _battery.GetCharge() << " | " << _drill.getBattery().GetCharge() << endl;
_drill.SafetyToggle();
_drill.Operate();
cout << "Battery charge: " << _battery.GetCharge() << " | " << _drill.getBattery().GetCharge() << endl;
_battery.Drain(20);
cout << "Battery charge: " << _battery.GetCharge() << " | " << _drill.getBattery().GetCharge() << endl;
_drill.getBattery().Drain(20);
cout << "Battery charge: " << _battery.GetCharge() << " | " << _drill.getBattery().GetCharge() << endl;

输出;

30
Battery charge: 30 | 30
Safety disabled.
VRMM! VRMM!
Battery Charge: 30 | 30
Battery Charge: 10 | 30
Battery Charge: 10 | 30

0 个答案:

没有答案