C ++将派生类的const值传递给基本意外行为的构造函数

问题描述 投票:0回答:1

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

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

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值。这是该规则的例外,还是有更适当的方法来应对这种情况?

c++ inheritance constructor const
1个回答
0
投票

这两个例子是完全无法比拟的。在第一个示例中,每个Derived实例都获得其自己的memorySize副本。如您所料,Derived的构造函数负责这一点。

您完全不需要。该类只有一个常量,每个实例都没有单独的常量。写成

class Derived: public Base
{
private:
  static const unsigned short memorySize = 100;    
© www.soinside.com 2019 - 2024. All rights reserved.