我的任务特别指出,我必须创建一个随机的正方形和三角形数组,它们是从抽象类 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/