我认为这是相当基本的,但是我在这里找不到任何来源。
派生类包含需要传递给基类的初始化信息。在这种情况下,这是内存保留。
class Derived: public Base
{
private:
const unsigned short memorySize= 100;
public:
inline Derived() : Base(memorySize) {}
void DoStuff();
};
这很惨。我希望基本构造函数在派生构造函数之前被调用,而memorySize仅在派生构造函数被调用时分配。
#define memorySize 100
class Derived: public Base
{
private:
public:
inline Derived() : Base(memorySize) {}
void DoStuff();
};
这按预期工作。
我的问题:我是假设第一个示例中的memorySize在调用基本构造函数时尚未初始化,还是在这里发生了其他事情?
我已经了解到#define常量在C ++中是不可取的,并且最好使用const值。这是该规则的例外,还是有更适当的方法来应对这种情况?
这两个例子是完全无法比拟的。在第一个示例中,每个Derived
实例都获得其自己的memorySize
副本。如您所料,Derived
的构造函数负责这一点。
您完全不需要。该类只有一个常量,每个实例都没有单独的常量。写成
class Derived: public Base
{
private:
static const unsigned short memorySize = 100;