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继承的内容。这是一个基础,但它也是另一个东西。假设基础=汽车,派生=敞篷车。有道理?