Lin*_*des 11 c++ inheritance copy-constructor abstract-base-class
我正在创建一个具有多种不同节点类型的树:二进制节点,一元节点和终端节点.我有一个所有节点继承的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;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我做不到
node = gpnode(src.node);
Run Code Online (Sandbox Code Playgroud)
因为gpnode是一个虚拟类.我可以
node = unode(src.node);
Run Code Online (Sandbox Code Playgroud)
但是当unode的子节点是bnode时,这不起作用.如何让它智能地调用我需要它的复制构造函数?
Moo*_*ice 12
您需要实现克隆.
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); };
};
Run Code Online (Sandbox Code Playgroud)
Etceteras
归档时间: |
|
查看次数: |
4189 次 |
最近记录: |