我认为这是相当基本的,但我在这里找不到任何来源。
派生类包含需要传递给基类的初始化信息。在这种情况下,它是一个内存预留。
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在调用基构造函数时还没有初始化,还是这里发生了其他事情?
我已经了解到,在C++中,#define for constant是不可取的,而且最好使用const值。这是这条规则的例外,还是有更合适的方法来处理这种情况?
这两个例子完全不可比。在第一个示例中,Derived
的每个实例都有自己的memorySize
副本。正如您所猜测的,Derived
的构造函数负责处理这一问题。
你根本不想那样。类只有一个常量,而不是每个实例都有一个单独的常量。写为
class Derived: public Base
{
private:
static const unsigned short memorySize = 100;