Вы можете использовать конструктор копирования:
Shape* s1 = new Circle;
Shape* s1 = new Square(s1);
С:
class Square : public Shape
{
...
public:
Square(const Circle& rhs)
{
// Copy the value you want to keep
// Respect the rules of copy constructor implementation
}
// Even better :
Square(const Shape& rhs)
{
...
}
...
};
Не забывайте, что преобразование круга на площади немного странно.
И в вашей реализации есть memory LEAK. Если вы не хотите использовать вас Circle
, удалите его.
Это было бы лучше:
Shape* s1 = new Circle;
Shape* s2 = new Square(s1);
delete s1;
EDIT: Вот ссылка про конструктор копирования и присваивания оператора: http://www.cplusplus.com/articles/y8hv0pDG/
Что вы подразумеваете под «сохранением переменных»? –
Я думаю, что он означает «членов». Это невозможно без использования функции преобразования. И почему вы хотите преобразовать круг в квадрат? –
Вы ** не ** делаем это. «Как» не имеет значения. –