gpt4 book ai didi

C++通过抽象基类在未知派生类上调用复制构造函数

转载 作者:可可西里 更新时间:2023-11-01 15:03:33 24 4
gpt4 key购买 nike

我正在制作一棵具有多种不同节点类型的树:二元节点、一元节点和终端节点。我有一个所有节点都继承自的 ABC。我正在尝试为树编写递归复制构造函数,如下所示:

class gpnode
{
public:
gpnode() {};
virtual ~gpnode() {};
gpnode(const gpnode& src) {};

gpnode* parent;
}

class bnode:gpnode
{
public:
bnode() {//stuff};
~bnode() {//recursive delete};

bnode(const bnode& src)
{
lnode = gpnode(src.lnode);
rnode = gpnode(src.rnode);

lnode->parent = this;
rnode->parent = this;
}

gpnode* lnode;
gpnode* rnode;
}

class unode:gpnode
{
public:
unode() {//stuff};
~unode() {//recursive delete};

unode(const unode& src)
{
node = gpnode(src.node);

node->parent = this;
}

gpnode* node;
}

我的问题是我做不到

node = gpnode(src.node);

因为gpnode是一个虚类。我可以做

node = unode(src.node);

但是当一个 unode 的子节点是一个 bnode 时,这不起作用。我如何让它智能地调用我需要它的复制构造函数?

最佳答案

您需要实现克隆。

   class base
{
public:
virtual base* clone() const = 0;
}

class derived : public base
{
public:
derived(){}; // default ctor
derived(const derived&){}; // copy ctor

virtual derived* clone() const { return new derived(*this); };
};

等等

关于C++通过抽象基类在未知派生类上调用复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7912994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com