Copy object - keep polymorphism

前端 未结 4 2047
借酒劲吻你
借酒劲吻你 2020-12-06 07:13

The following code tries to copy an object and keep the original type. Unfortunately it does not work (every copied object will become a Super instead of being

4条回答
  •  借酒劲吻你
    2020-12-06 08:11

    Try this:

    class Super
    {
    public:
        Super();// regular ctor
        Super(const Super& _rhs); // copy constructor
        virtual Super* clone() const {return(new Super(*this));};
    }; // eo class Super
    
    
    class Special : public Super
    {
    public:
        Special() : Super() {};
        Special(const Special& _rhs) : Super(_rhs){};
        virtual Special* clone() const {return(new Special(*this));};
    }; // eo class Special
    

    Note that we have implemented a clone() function that Special (and any other derivative of Super) overrides to create the correct copy.

    e.g:

    Super* s = new Super();
    Super* s2 = s->clone(); // copy of s
    Special* a = new Special();
    Special* b = a->clone(); // copy of a
    

    EDIT: As other commentator pointed out, *this, not this. That'll teach me to type quickly.

    EDIT2: Another correction.

    EDIT3: I really should not post so quickly when in the middle of work. Modified return-type of Special::clone() for covariant return-types.

提交回复
热议问题