使用 C++ 通过继承组织树复制

Organizing tree copying with inheritance using C++

我有一个Tree_item class(用的是C++/Qt4,兼容C++03),代表的是树结构。每个节点都有一个指向父节点的原始指针和 QList 个指向子节点的指针。 Tree_item 有一个复制构造函数,它被递归调用并且工作正常。

Tree_item::Tree_item(const Tree_item &tree_item)
{
 //deep copy tree_item members to the current instance 
 //...

 for (unsigned int i = 0;i < tree_item.child_list_.size();i++)
 {
    Tree_item* new_child = new Tree_item(*tree_item.child_list_.at(i));
    new_child->parent_item_ = this;
    child_list_ << new_child;        
 }
}

但是我需要创建一个继承的class Extended_tree_item,其中包含一些intbool成员和方法。这个新的 class 必须有一个构造函数,该构造函数具有对基础 class 实例的 const 引用(其他成员必须设置为默认值)。我听说过 Prototype 设计模式,但使用示例很原始。对于具有基础和派生 classes 的树,应该如何组织构造函数和 clone 方法?

TreeItem class 应该有:

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

然后导出 class 将有:

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

那么扩展的树项目也应该有复制构造函数:

Extended_tree_item(const Extended_tree_item &orig);