哪种情况会在C ++中使用clone以及如何使用它?

时间:2011-10-10 02:54:10

标签: c++

虚拟克隆和克隆之间有什么区别? 我找到下面的例子,它克隆派生到base,它是什么用的?

class Base{
public:
    virtual Base* clone() {return new Base(*this);}
    int value;
    virtual void printme()
    {
        printf("love mandy %d\n", value);
    }
};
class Derived : public Base
{
public:
    Base* clone() {return new Derived(*this);}
    virtual void printme()
    {
        printf("derived love mandy %d\n", value);
    }
};

Derived der;
    der.value = 3;

    Base* bas = der.clone();
    bas->printme();

2 个答案:

答案 0 :(得分:4)

考虑一下:

Base * b = get_a_base_object_somehow();

// now,b可能是Base类型,Derived类型,或者是从Base

派生的其他类型
Base * c = b->clone();

//现在,c将与b的类型相同,并且您可以在不知道其类型的情况下复制它。这就是克隆方法的好处。

答案 1 :(得分:2)

考虑一下:

Base* p1 = &der;
Base* p2 = p1->clone()
p2->printme();

如果clone()不是虚拟的,结果将是“love mandy 3”。如果它是虚拟的,结果将是“派生的爱情mandy 3”。