我有一个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
,其中包含一些int
和bool
成员和方法。这个新类必须有一个带有对基类实例的const引用的构造函数(其他成员必须设置为默认值)。我听说过Prototype
设计模式,但用法示例是原始的。如何为具有基类和派生类的树组织构造函数和clone
方法?
答案 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);