【发布时间】:2020-01-06 06:27:10
【问题描述】:
我有 2 个类用于管理 2 个不同类型的队列(形式为 list<myType1*> 和 list<myType1*>)。
为了简化情况,我们可以在这里使用std::vector<std::string> 和std::vector<int>,如下例所示:
class StringQueue
{
public:
StringQueue();
~StringQueue();
int count() const {return m_queue.size();}
void add(std::string item) {m_queue.push_back(item);}
void clear() {m_queue.clear();}
...etc...
protected:
std::vector<std::string> m_queue;
};
class IntQueue
{
public:
IntQueue();
~IntQueue();
int count() const {return m_queue.size();}
void add(int item) {m_queue.push_back(item);}
void clear() {m_queue.clear();}
...etc...
protected:
std::vector<int> m_queue;
};
对于每个Queue 类,我有很多函数可以访问队列(添加、清除、计数、检查、弹出一个、弹出多个等...)
看代码,我现在的问题是:这里可以使用继承吗?
我知道我可以实现Queue 基类,但只能派生几个函数(上例中的count()),因为m_queue 对象不同,即使函数(add、clear、等等...)是一样的。
即使std::vector元素不同,是否有可能有完整的函数继承?
我在想这样的事情:
class Queue
{
public:
Queue();
~Queue();
int count() const {return m_queue.size();}
void add(T item) {m_queue.push_back(item);}
void clear() {m_queue.clear();}
...etc...
protected:
std::vector<T> m_queue;
};
有没有办法做到这一点?
【问题讨论】:
-
有人能这么好心地解释一下反对票吗?
-
我想知道你为什么不使用类的模板版本!!有什么好的理由避免这种情况吗?
-
查看任何 std::stack 或 std::priority_queue 实现。它是您想要的容器包装器。此外,永远不要从任何 STL 容器继承。
-
如果您不想从容器继承,您希望人们通过“从 std::vector 继承”来理解什么?
-
@Ayxan 多态并不是继承的唯一目的。从非虚拟基类继承完全没问题,只是你不能多态地使用这样的类。
标签: c++ inheritance