创建超类的指针数组以堆分配继承的类

时间:2019-06-25 23:12:43

标签: c++ inheritance

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

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

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

我想创建一个“几何形式”指针数组,并根据i的情况将第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();
}

1 个答案:

答案 0 :(得分:1)

您的menuSquares()的{​​{1}}参数是通过值 获取的,因此该参数仅对GeomFig*是局部的,并且在{{1 }}不会被呼叫者看到。

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

menuSquares()

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

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