如何以多态方式创建对象的动态数组?

Posted

技术标签:

【中文标题】如何以多态方式创建对象的动态数组?【英文标题】:How to create a dynamic array of objects polymorphically? 【发布时间】:2012-11-20 01:35:40 【问题描述】:

如果我有一个带有派生类的抽象类并且不使用 STL 数据结构类,我 (向量、列表等)

对象的静态数组

TwoDimensionShape *shapes[2];       
shapes[0] = &Triangle("right", 8.0, 12.0);  
shapes[1] = &Rectangle(10);  

我知道我不能这样做,因为你不能创建抽象类的对象:

cin >> x;
TwoDimensionShape *s = new TwoDimensionShape [x];

编辑:

感谢尼克,这行得通:

  int x = 5;
  TwoDimensionShape **shapes = new (TwoDimensionShape*[x]);

【问题讨论】:

【参考方案1】:

您可以创建一个指向该类的指针数组:

TwoDimensionShape **s = new TwoDimensionShape*[x];

然后用它的特定类型构造每个对象:

s[0] = new Triangle("right", 8.0, 12.0);  
s[1] = new Rectangle(10);

与你所拥有的相似。 不再需要时记得删除。

【讨论】:

我有问题,int x = 5; TwoDimensionShape **shapes = new (TwoDimensionShape *)[x];编译器说“TwoDimensionShape * 类型的值不能用于初始化 TwoDimensionShape ** 类型的实体 您在形状上缺少一个星号,在 TwoDimensionShape 之后缺少一个星号:TwoDimensionShape **shapes = new (TwoDimensionShape*)[x]; 咦,这很奇怪,当我点击编辑时它就在那里,但仍然报错 能否更新顶部的问题以查看更改后的代码情况? 我想通了,[x] 应该在 * 之后的括号内,我会发布更新

以上是关于如何以多态方式创建对象的动态数组?的主要内容,如果未能解决你的问题,请参考以下文章

java中如何创建动态数组

如何初始化动态对象数组

使用多维数组构建对象以动态创建列

面向对象(继承,多态)

创建和访问类对象的动态数组

如何将一个对象数组中的所有项目从Javascript动态显示为HTML?