C ++ class cloning using virtual methods

I have the following class relation. I want to clone the Derived class, but I get the error "cannot create abstract class". How can I clone a derived class? Thank.

class Base {
public:
    virtual ~Base() {}
    virtual Base* clone() const = 0;
};

class Derived: public Base {
public:
    virtual void func() = 0;
    virtual Derived* clone() const {
        return new Derived(*this);
    }
};
+5
source share
4 answers

Only specific classes can be created. You must reverse engineer the Derived interface for cloning. First remove virtual void func () = 0; Then you can write this code:

class Base {
public:
    virtual ~Base() {}
    virtual Base* clone() const = 0;
};

class Derived: public Base {
public:
    virtual Derived* clone() const {
        return new Derived(*this);
    }
};

Another solution is to keep a pure virtual function in place and add a specific class:

class Base {
public:
    virtual ~Base() {}
    virtual Base* clone() const = 0;
};

class Derived: public Base {
public:
    virtual void func() = 0;
};

class Derived2: public Derived {
public:
    virtual void func() {};
    virtual Derived2* clone() const {
        return new Derived2(*this);
    }
};
+6
source

You cannot instantiate a class with a pure virtual function like this:

virtual void yourFunction() = 0

Create a subclass or delete it.

+4

. Func .

+2

- , , clone . , , , , clone . , ,

Derived original;
Derived* copy = new Derived(original)

, , ( ).

0

All Articles