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

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