派生的C++类如何通过基指针克隆自身?

wan*_*ssv 5 c++ cloning

这是我正在尝试做的(此代码不起作用):

class Base
{
    virtual Base *clone() { return new Base(this); }
    virtual void ID() { printf("BASE");
};

class Derived : publc Base
{
    virtual Base *clone() { return new Derived(this); }
    virtual void ID() { printf("DERIVED"); }
}

.
.
Derived d;
Base *bp = &d;
Base *bp2 = bp->clone();

bp2->ID();
Run Code Online (Sandbox Code Playgroud)

什么我喜欢是看到"派生"打印出来......我得到的是"基地".我是一名长期的C程序员,并且对C++有相当的经验...但我没有取得任何进展......任何帮助都将受到赞赏.

Fre*_*son 7

一旦修复了所有的编译错误,我最终得到了这个:

#include <cstdio>

class Base
{
  public:
    Base() {}
    Base(const Base&) {}
    virtual Base *clone() { return new Base(*this); }
    virtual void ID() { printf("BASE"); }
};

class Derived : public Base
{
  public:
    Derived() {}
    Derived(const Derived&) {}
    virtual Base *clone() { return new Derived(*this); }
    virtual void ID() { printf("DERIVED"); }
};


int main()
{
  Derived d;
  Base *bp = &d;
  Base *bp2 = bp->clone();

  bp2->ID();
}
Run Code Online (Sandbox Code Playgroud)

哪个可以满足您的需求 - 衍生.


Mac*_*cke 0

您正在对类进行切片Base bp = &d;(这会从导出的 ptr 构造一个新的基本 bp。)

尝试Base* bp = &d;一下。(即创建一个指向 Derived 对象的 Base 类型的指针。)