C++ 如何创建从抽象类继承的对象的动态数组?

标签 c++ arrays inheritance dynamic abstract-class

我的任务特别指出,我必须创建一个随机的正方形和三角形数组,它们是从抽象类 Figure 继承的,然后我必须打印出它们的正方形面积。来自 C#,我以为我会离开对象数组,但它们在 C++ 中不存在。我不允许使用 vector 之类的东西。制作 Figure 的动态数组不起作用,因为显然它永远不适用于抽象类。我应该怎么办?请尽可能简化。

这是我当前的代码。非常基本,但它只是为了展示我正在尝试做的事情。

#include <iostream>
#include <stdlib.h>

using namespace std;

class Figure
{
    public:
        virtual double square() = 0;
};

class Square : public Figure
{
    public:
        double side;

        double square()
        {
            return side * side;
        }
};

class Triangle : public Figure
{
    public:
        double height;
        double side;

        double square()
        {
            return 0.5 * side * height;
        }
};

void main()
{
    int size = 20;
    Figure *dyn_arr = new Figure[size]; // this doesn't work
    //Also I have to fill it somehow too...
    for (int i = 0; i < size; i++) cout << Figure.square(); //this doesn't    work either
}

最佳答案

首先 main 必须返回 int。然后您需要创建一个指针数组,它将显示给抽象类 Figure

Figure **dyn_arr = new Figure*[size];

然后如果你想添加一个派生类的新对象,你只需像这样添加。

dyn_arr[0] = new Triangle(); --> 这将创建新对象,该对象将返回该对象的地址,而您的数组实际上是指针数组。

最后,如果您想从任何类中调用函数 square,您可以这样做。

dyn_arr[0]->square();

附注如果您对指针没有一点经验,这可能会造成混淆。

关于C++ 如何创建从抽象类继承的对象的动态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45176135/

相关文章:

c++ - 冒泡排序、选择排序和插入排序

ruby - 最多 n 的组合

java - @Inheritance TABLE_PER_CLASS 标准奇怪的行为

ios - 将对象数组转换为数组对象

php - 数组数据计算

javascript - javascript 中区分普通函数和构造函数

C# 接口(interface)、多态性和委托(delegate)

c++ - 在没有 c++11 的情况下删除 map 最后插入的元素的正确方法是什么?

c++ - 从 RGB BMP 创建灰度 BMP

c++ - 在 C++ 中删除对象