为只读成员赋值 - C++
Assigning value to read-only member - C++
我将如何制作一个 ElectricPump 并在该对象中分配值 "rate"。我的当前代码出现以下错误:
../src/Boat.cpp:144:7: error: assignment of read-only member 'Pump::rate'
下面是我的class声明:
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;
}
声明为 const 的成员不能赋值,只能初始化,例如在构造函数的初始化列表的过程中。因此,由于子类无法初始化其超类的数据成员,因此您必须 "call" 超类的构造函数:
ElectricPump::ElectricPump() : Pump(5.0) { }
标记为const
的成员必须在构造对象之前赋值。除此之外,您必须为 Pump
声明一个默认构造函数,或者在 ElectricPump
class.
中显式调用定义的构造函数
请注意,初始化列表是 运行 在构造对象之前,因此可以在其中设置 const
成员。要解决您的问题,请使用:
ElectricPump::ElectricPump()
: Pump(5.0)
{ }
这将在构造 ElectricPump
之前使用您传入的值调用 Pump
的构造函数。我强烈建议阅读 initializer lists 及其使用方法。
我将如何制作一个 ElectricPump 并在该对象中分配值 "rate"。我的当前代码出现以下错误:
../src/Boat.cpp:144:7: error: assignment of read-only member 'Pump::rate'
下面是我的class声明:
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;
}
声明为 const 的成员不能赋值,只能初始化,例如在构造函数的初始化列表的过程中。因此,由于子类无法初始化其超类的数据成员,因此您必须 "call" 超类的构造函数:
ElectricPump::ElectricPump() : Pump(5.0) { }
标记为const
的成员必须在构造对象之前赋值。除此之外,您必须为 Pump
声明一个默认构造函数,或者在 ElectricPump
class.
请注意,初始化列表是 运行 在构造对象之前,因此可以在其中设置 const
成员。要解决您的问题,请使用:
ElectricPump::ElectricPump()
: Pump(5.0)
{ }
这将在构造 ElectricPump
之前使用您传入的值调用 Pump
的构造函数。我强烈建议阅读 initializer lists 及其使用方法。