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

时间:2015-09-12 07:36:31

标签: c++ inheritance design-patterns tree

我有一个Tree_item类(使用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;        
 }
}

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

1 个答案:

答案 0 :(得分:1)

TreeItem类应具有:

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

然后派生类会有:

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

然后扩展树项也应该有copy-ctor:

Extended_tree_item(const Extended_tree_item &orig);