【问题标题】:List inheritance in C++C++ 中的列表继承
【发布时间】:2016-12-25 07:22:42
【问题描述】:

我正在做一个涉及大量多个类列表的程序。我很确定它有一个名字,但我真的不知道怎么称呼它,我想做的是制作一个包含一些函数(如元素插入,getter ...)的通用列表,所有列表继承并可以使用通用列表的功能。所以我的问题是如果可能的话如何用一个例子来做。 我在下面做了一个标头代码示例。

class CommonList {
  public:
        // Add some functions
        // T here is not a class I've made.
        void insere(T element);
        T getElement(int id);
  protected:
        std::map<int,T> m_map;
};

class A {
    public: A();
}

class B {
    public: B();
}

class ListA : public CommonList {
    // Tell the program that element T are ONLY object of class A.
    // Like if I would have made this.
    /*
  public:
        void insere(A element);
        A getElement(int id);
  protected:
        std::map<int,A> m_map;
    */
};

class ListB : public CommonList {
    // Same for B.
}

【问题讨论】:

  • 您可以使用CommonList的模板
  • 它被称为std::list(但没有继承)。

标签: c++ list templates inheritance


【解决方案1】:

我很确定它有一个名字,但我真的不知道怎么称呼它

您要查找的词是 模板 类。

这就是它的完成方式:

template <typename T>
class CommonList {
public:
    void insert(T element){
        /* Implement your insert function here */
    };
    T getElement(int id){
        /* Implement your getElement function here */
    };
protected:
    std::map<int,T> m_map;
};

然后您可以简单地创建该列表的任何类型,例如:

int main(){
    CommonList<int> int_list;
    my_list.insert(7);
    CommonList<double> double_list;
    my_list.insert(4.3);
}

你当然也可以从这个类继承并覆盖你想要的函数。

class A{}; 
class ListA : public CommonList<A>{
    // ... 
};

或作为模板

template <typename T>
class ListT : public CommonList<T>{
    // ...
};

【讨论】:

猜你喜欢
  • 2019-08-06
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
相关资源
最近更新 更多