2

我认为这是相当基本的,但我在这里找不到任何来源。

派生类包含需要传递给基类的初始化信息。在这种情况下,它是内存预留。

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 for constants 在 C++ 中是不可取的,并且最好使用 const 值。这是该规则的一个例外,还是有更合适的方法来处理这种情况?

4

1 回答 1

4

这两个例子完全没有可比性。在第一个示例中,每个 的实例Derived都有自己的memorySize. 正如您所猜到的,构造函数Derived负责处理这一点。

你根本不想要那个。类只有一个常量,而不是每个实例都有一个单独的常量。写成

class Derived: public Base
{
private:
  static const unsigned short memorySize = 100;    
于 2019-11-19T12:15:28.003 回答