Is there a way to work around this?Im declaring class objects in a switch statement and later using that variable outside the switch, it only works if i put the rest of my cod
No, it is not possible. geo
can only have one type at compile time, and it cannot change at runtime.
You could do something similar with dynamic allocation and polymorphism, but it might not be the best solution to your problem.
With the knowledge that Quad is the base class of the others, the following might be a usable solution:
Quad* geo = 0;
switch (shape) {
case 'q':
geo = new Quad(a,b,c,d);
break;
case 'r':
geo = new Rectangle(a,b,c,d);
...
default:
break;
}
if (geo) geo->print();
delete geo; // Ok if geo is 0.
This solution is not particularly pretty, mainly because it uses raw pointers and new
and delete
directly. A more polished version would use the Factory
pattern, returning a smart pointer.