虚拟克隆和克隆之间有什么区别? 我找到下面的例子,它克隆派生到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();
答案 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”。