declaring class objects in a switch and later using that variable outside the switch

后端 未结 2 841
梦毁少年i
梦毁少年i 2021-01-22 15:34

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

2条回答
  •  故里飘歌
    2021-01-22 16:19

    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 Factorypattern, returning a smart pointer.

提交回复
热议问题