Динамическое связывание нескольких
Привет, эксперты, я могу сделать динамическое связывание, как это. 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)
2 ответа
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
,
Вам понадобится массив или контейнер указателей, или, предпочтительно, умные указатели, для базового класса. Например:
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);