将值赋给只读成员 - C ++

时间:2017-11-22 19:37:07

标签: c++ readonly protected

我如何制作一个ElectricPump并分配价值" rate"在那个对象内。我的当前代码出现以下错误:

../src/Boat.cpp:144:7: error: assignment of read-only member 'Pump::rate'

以下是我的班级声明:

class Pump
{
protected:
    Pump(float rate);
    virtual void pump(Boat &) = 0;
    const float rate;
};

class ElectricPump : public Pump
{
public:
    ElectricPump();
    virtual void pump(Boat &);
};

实现:

Pump::Pump(float r) : rate(r){}

ElectricPump::ElectricPump(){
    rate = 5.0;
}

2 个答案:

答案 0 :(得分:6)

声明为const的成员无法分配,只能初始化,例如在构造函数的初始化列表过程中。因为子类不能初始化其超类的数据成员,所以你必须“调用”超类的构造函数:

ElectricPump::ElectricPump() : Pump(5.0) { }

答案 1 :(得分:0)

标记为const的成员必须在构造对象之前指定值。除此之外,您必须为Pump声明默认构造函数,或者在ElectricPump类中显式调用已定义的构造函数。

请注意,初始化程序列表在构造对象之前运行,因此可以在其中设置const个成员。要解决您的问题,请使用:

ElectricPump::ElectricPump()
    : Pump(5.0)
{ }

在构造Pump之前,这将使用您传入的值调用ElectricPump的构造函数。我强烈建议您阅读initializer lists及其使用方法。