如何创建一个多态的对象动态数组?

3
如果我有一个抽象类和派生类,并且不使用STL数据结构类,如何通过多态方式创建动态对象数组?(例如向量、列表等)?
静态对象数组
TwoDimensionShape *shapes[2];       
shapes[0] = &Triangle("right", 8.0, 12.0);  
shapes[1] = &Rectangle(10);  

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

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

编辑:

感谢Nick,这个可以工作:

  int x = 5;
  TwoDimensionShape **shapes = new (TwoDimensionShape*[x]);
1个回答

4
你可以创建一个指向该类的指针数组:
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 **的实体。” - Dog
你在shapes和TwoDimensionShape之后缺少一个星号:TwoDimensionShape **shapes = new (TwoDimensionShape*)[x]; - imreal
哎呀,这很奇怪,当我点击编辑时它在那里,但仍然会出现错误。 - Dog
你能否更新顶部的问题,以便查看此更改后的代码? - imreal
1
我想通了,[x] 应该在 * 后面的括号里,我会发布更新。 - Dog
@Dog 很有趣,括号只是为了清晰明了,没有它们也应该能正常工作,谢谢 :) - imreal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接