使用模板和继承的容器实现

Container implementation using templates and inheritance

本文关键字:实现 继承      更新时间:2023-10-16

我试图通过继承一个基本的2-3树容器来实现一个通用的排序树容器

基本树声明如下:

    template<typename T>
    class Node{
    // etc..
    }
    template<typename T>
    class Tree{
    Node* root;
    // etc
   } 

假设我想实现一个整数树,我想我可以声明一个类如下:

class RankedNode : public Node<int>{
// ...
}
class RankedTree : public Tree<int>{
RankedNode root*; // for example
// ...
}

RankedNode类将包括Node类的附加字段,这有助于快速遍历树(O(logn((,并且通过使用继承,我将能够防止代码重复。

然而,我不知道如何正确地做到这一点,任何想法都将不胜感激:(

您可以先将Tree作为N上的模板(节点类型(,而不是T(值类型(:

template<typename T>
class Node{
   // etc..
}
template<typename N>
class Tree{
   N* root;
   // etc
}

这样你就可以写

class RankedNode : public Node<int>{
// ...
}
class RankedTree : public Tree<RankedNode>{
    // RankedNode* root; <- remove this; it is already in Tree<RankedNode>
    // ...
}

并且只添加与基类相比真正新的字段。