首页 > 解决方案 > 创建一个超类的指针数组以堆分配继承的类

问题描述

基本上,我想使用一个超类的指针数组并将它们用于子类。

我有一个操作几何形式的代码。它是一个“几何形式”超类,由虚拟方法和静态整数组成。

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

我想创建一个“几何形式”指针数组,并将第i' 项(基于静态属性的索引)传递给特定的子函数,基于一个switch案例,负责该几何图形的方法,使用那个i'th 指针.

示例:我想使用正方形,所以我通过了一个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();
}

标签: c++inheritance

解决方案


menuSquares()正在按值GeomFig*获取其参数,因此该参数仅是本地的,调用者不会看到其中分配给它的任何内容。menuSquares()menuSquares()

如果您希望调用者看到新的指针值,则需要通过引用传递指针:

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

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

GeomFig* menuSquares()
{
    return new Circle();
}

...

arrayPtrs[GeomFig::getStatic()] = menuSquares();

推荐阅读