c++ - 如何在基于派生类的大小的基构造函数中分配数组?

标签 c++ inheritance static constructor

我有一个类层次结构。基类使用一些可从文件加载(并可在运行时重新加载)的调整参数。每个派生类都可以添加一些额外的参数。我正在寻找一种在基本构造函数中分配大小正确的参数数组的方法,这样我就不必在派生类中取消分配和重新分配。我希望有这样的东西,但它不起作用(参数总是有 2 个元素):

   class Base
   { static int nParms;
     virtual int getNParms() { return nParms;}
     float *parameters;
   public:
     Base() 
     { parameters= new float[this->getNParms()];
       parameters[0] = globalReloadableX;
       parameters[1] = globalReloadableY;
     }
   };
   int Base::nParams =2;

   class Derived : public Base
   { static int nParms;
     virtual int getNParms() { return nParms;}
   public:
     Derived() : Base()
     { parameters[2] = globalReloadableZ;
     }
   }
   int Derived::nParams =3;

我看过 this question ,但那里的解决方案对我来说不太适用。 我还尝试在每个类中将参数设为常规数组:

  class Base
  {  float parameters[2]
    ...
  class Derived : public Base
  {  float parameters[3]
    ...

但这使得 Derived 有 2 个独立的数组。

有什么想法吗?

最佳答案

为什么不在基类的构造函数中将所需的数组大小作为参数传递?

(虚函数不调用派生类的原因是因为 C++ 虚函数就是这样工作的;从概念上讲,直到派生类构造函数完成,对象的类型仍然是基类。)

关于c++ - 如何在基于派生类的大小的基构造函数中分配数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/691014/

相关文章:

c++ - 通过调用 C++ 中的静态类函数初始化的全局静态变量

java - 单例与静态偏好和缺陷

c# - 在 C# 中有条件地调用重写的基方法

java - 使用 JAXB 从 XML 文件读取时如何使用继承

java - 如何在静态方法中实例化非静态内部类?

c++ - 用于读取输入文件的内存映射文件有多安全?

c++ - 外部与内部联系和绩效

c++ - 在类修改器中使用 assert() 是好的做法吗?

c++ - 返回指针并传入 const 引用

c++ - protected 继承 - 为什么不允许某个命令