Динамическое связывание нескольких

Привет, эксперты, я могу сделать динамическое связывание, как это.
objshapes — это родительский класс Shape, а Rectangle — дочерний класс. У меня есть несколько дочерних классов, поэтому в зависимости от того, какую форму выбирает пользователь, мне нужно привязать правильную форму к objShapes. Так что я думал, что смогу связать вот так. но я получаю ошибку.

 Shape *objShapes[3];
objshapes[size]= &new Rectangle(3,lvaule,5)

//error: lvalue required as unary ‘&’ operand

Надеюсь, кто-то может помочь. Спасибо

ЭТО ПРАВИЛЬНО

  objshapes[size]= new Rectangle(3,lvaule,5)

0

Решение

Shape *objShapes[3];

Это объявляет objshapes как массив из 3 указателей на Shape.

objshapes[size]= &new Rectangle(3,lvaule,5)

Это бессмысленно.

ЭТО ПРАВИЛЬНО

objshapes[size]= new Rectangle(3,lvaule,5)

да1, это правильно. new возвращает указатель на прямоугольник, который может храниться в переменной типа указатель на форму. поскольку objshapes это массив указателей на форму. objshapes[size] это указатель на форму — который может принимать указатель на прямоугольник.

1. Предполагая, что size конвертируется в целочисленный тип и имеет значение 0, 1, или же 2,

1

Другие решения

Вам понадобится массив или контейнер указателей, или предпочтительно умные указатели, в базовый класс. Например:

std::vector<Shape*> objshapes;
objshapes.push_back(new Rectangle(3,lvaule,5));
objshapes.push_back(new Circle( args));

Если вы используете необработанные указатели вместо интеллектуальных указателей, вы должны убедиться, что выделили память, используемую фигурами, путем вызова delete на всех указателях.

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

objshapes[idx]= new Rectangle(3,lvaule,5);
1

По вопросам рекламы [email protected]