Создайте массив указателей суперкласса, чтобы выделить кучу унаследованных классов - PullRequest
2 голосов
/ 26 июня 2019

По сути, я хочу работать с массивом указателей суперкласса и использовать их для подклассов.

У меня есть код, который манипулирует геометрическими формами. Это суперкласс "геометрических форм", состоящий из виртуальных методов и статических целых.

Позже в коде я создаю унаследованные классы (круги, квадраты ..), дополняющие приложение.

Я хочу создать массив указателей «геометрических форм» и передать 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 Ответ

1 голос
/ 26 июня 2019

Ваш menuSquares() принимает свой GeomFig* параметр значением , поэтому параметр является локальным только для menuSquares(), и все, что назначено ему внутри menuSquares(), не будет видно вызывающей стороне .

Если вы хотите, чтобы вызывающая сторона увидела новое значение указателя, вам нужно передать указатель по ссылке вместо:

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

В противном случае menuSquares() возвращает желаемый указатель в возвращаемом значении вместо использования выходного параметра:

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

...

arrayPtrs[GeomFig::getStatic()] = menuSquares();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...