创建一系列超类的指针,以分配继承的类

Create an array of pointers of a superclass to heap allocate inheritted classes

本文关键字:分配 继承 指针 一系列 超类 创建      更新时间:2023-10-16

基本上,我想使用一系列超级类的指针并将其用于子类。

我有一个操纵几何形式的代码。这是一个"几何形式"超类,由虚拟方法和静态ints组成。

稍后在代码中,我创建了继承的类(圆,正方形..(,补充了应用程序。

我想创建一个"几何形式"指针的数组,然后将i'TH项目(基于静态属性索引(传递给特定的子功能,基于switch情况,负责该几何图形的方法,使用该i'指针。

示例:我想使用正方形,所以我通过了menuSquares(geometricFroms *array[foo::getStatic()]){} ...

在该功能中,我想做:

ptrPassed = new Circle();

我该怎么做?

我尝试使用通用int指针而不是超级类型类型:

Class GeomFig {};
Class Circle : public GeomFig
{};
int main(){
    GeomFig *arrayPtrs[100];
    // selection of which shape the user wants to use
    // ...
    menuSquares(arrayPtrs[GeomFig::getStatic()]) {}...
}
// code def
menuSquares(GeomFig* &geomPtr)
{
    geomPtr = new Circle();
}

您的 menuSquares()正在将其GeomFig*参数按值进行,因此该参数仅是menuSquares()的本地,并且在menuSquares()中分配给它的任何东西都不会看到呼叫者。

如果您希望呼叫者看到新的指针值,则需要通过Reference 将指针传递:

void menuSquares(GeomFig* &geomPtr)
{
    geomPtr = new Circle();
}

否则,让menuSquares()在其返回值中返回所需的指针,而不是使用输出参数:

GeomFig* menuSquares()
{
    return new Circle();
}
...
arrayPtrs[GeomFig::getStatic()] = menuSquares();