C++ 在C++;如何使用它?
虚拟克隆和克隆的区别是什么? 我发现下面的例子,它是克隆派生到基的,它是用来做什么的C++ 在C++;如何使用它?,c++,C++,虚拟克隆和克隆的区别是什么? 我发现下面的例子,它是克隆派生到基的,它是用来做什么的 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
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();
考虑这一点:
Base* p1 = &der;
Base* p2 = p1->clone()
p2->printme();
Base * b = get_a_base_object_somehow();
如果clone()
不是虚拟的,结果将是“love mandy 3”。如果它是虚拟的,结果将是“导出的爱mandy 3”。考虑一下:
Base* p1 = &der;
Base* p2 = p1->clone()
p2->printme();
Base * b = get_a_base_object_somehow();
如果clone()
不是虚拟的,结果将是“love mandy 3”。如果它是虚拟的,结果将是“导出的爱mandy 3”。考虑一下:
Base* p1 = &der;
Base* p2 = p1->clone()
p2->printme();
Base * b = get_a_base_object_somehow();
//现在,b可能是Base类型,或者派生类型,或者是从Base派生的其他类型
Base * c = b->clone();
//现在,c与b的类型相同,您可以在不知道其类型的情况下复制它。这就是克隆方法的好处。考虑一下:
Base* p1 = &der;
Base* p2 = p1->clone()
p2->printme();
Base * b = get_a_base_object_somehow();
//现在,b可能是Base类型,或者派生类型,或者是从Base派生的其他类型
Base * c = b->clone();
//现在,c与b的类型相同,您可以在不知道其类型的情况下复制它。这就是克隆方法的优点。See的可能重复,其中
GetNumberOfLegs()
在基类中声明为virtual
,但在派生类中不声明。See的可能重复,尤其是在GetNumberOfLegs()中
在基类中声明为virtual
,但在派生类中不声明。您指的是哪种类型?类型不是基吗?这就是多态性的含义。您可能有一个指向基的指针,但该对象实际上可能是派生类型的。因此,get_a_base_object_()实际上可能会返回从base继承的内容。这是一个基础,但它也是另一个东西。假设基础=汽车,派生=敞篷车。有道理吗?你指的是哪种类型?类型不是基吗?这就是多态性的含义。您可能有一个指向基的指针,但该对象实际上可能是派生类型的。因此,get_a_base_object_()实际上可能会返回从base继承的内容。这是一个基础,但它也是另一个东西。假设基础=汽车,派生=敞篷车。有道理?