使用 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
,其中包含一些int
和bool
成员和方法。这个新的 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);
我有一个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
,其中包含一些int
和bool
成员和方法。这个新的 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);