首页 > 解决方案 > 如何将子类的对象添加到抽象基类的动态数组中?

问题描述

例子:

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);

由于我不允许编辑的代码中有大量错误,因此不允许。

不:

只是很好的老式手动内存处理。

标签: c++c++17

解决方案


推荐阅读