c++ - 如何将子类的对象添加到抽象基类的动态数组中?
问题描述
例子:
class Shape{
public:
virtual int getArea() = 0;
};
class Square : public Shape{
public:
Square(int h, int w):
m_h(h),
m_w(w){}
int getArea() override{
return m_h * m_w;
}
private:
int m_h;
int m_w;
};
class ShapeCollection{
public:
ShapeCollection(size_t capacity):
m_size(0),
m_shape_array(new Shape*[capacity]){
for (size_t i = 0; i < m_capacity; ++i)
{
m_shape_array[i] = nullptr;
}
}
~ShapeCollection(){
for (size_t i = 0; i < m_capacity; ++i)
{
delete m_shape_array[i];
}
delete[] m_shape_array;
}
void addShape(const Shape& shape){ // This must the arguments.
// I'M ONLY ASKING FOR HELP FROM HERE!
if (m_size >= m_capacity)
{
throw std::invalid_argument("Shape array is full");
}
m_shape_array[m_size] = shape; // This dosen't work.
// TO HERE!
}
private:
size_t m_size;
size_t m_capacity;
Shape** m_shape_array;
};
动态添加项目,即
m_shape_array[m_size] = new Shape(shape);
由于我不允许编辑的代码中有大量错误,因此不允许。
不:
- 矢量图
- 移动构造函数
- 复制构造函数
- 移动赋值构造函数
- 复制赋值构造函数
只是很好的老式手动内存处理。
解决方案
推荐阅读
- swift - 应用程序第二次启动时显示第二个 ViewController
- java - 重载Java方法和继承,调用最具体的实现
- python - 如何修复 django 中的“不可排序类型:NoneType() > float()”错误
- javascript - 无法读取数组中未定义的属性“情节”[vuejs]
- java - 为什么模拟对象没有得到方法调用?
- jquery - 房间:362 未捕获的类型错误:无法读取未定义的属性“长度”
- kubernetes - kubelet 处理事件时出错 /sys/fs/cgroup/memory/libcontainer_10010_systemd_test_default.slice
- docker - 使用 Docker 映像的神秘 Filebeat 7 X-Pack 问题
- r - R:从多个文件夹中读取一个 csv 文件并写入一个 xslx 文件,保留工作表名称
- c++ - 有没有办法使用数组填充向量?