如何以多态方式创建对象的动态数组?
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] 应该在 * 之后的括号内,我会发布更新以上是关于如何以多态方式创建对象的动态数组?的主要内容,如果未能解决你的问题,请参考以下文章