我有以下类定义:
template<typename QueueItemT>
class QueueBC
{
protected:
QueueBC() {}
virtual ~QueueBC() {}
private:
virtual IItemBuf* constructItem(const QueueItemT& item) = 0;
}
我创建了以下子类:
class MyQueue
: public QueueBC<MyItemT>
{
public:
MyQueue() {}
virtual ~MyQueue() {}
};
这在VS2005下编译得很好,但我没有在constructItem()
类中实现MyQueue
。知道为什么吗?
答案 0 :(得分:5)
尝试使用它:
MyQueue m;
您不能实例化抽象类,但您可以定义一个(显然,就像您定义的QueueBC
)。 MyQueue
同样抽象。
例如:
struct base // abstract
{
virtual void one() = 0;
virtual void two() = 0;
};
struct base_again : base // just as abstract as base
{
};
struct foo : base_again // still abstract
{
void one() {}
};
struct bar : foo // not abstract
{
void two() {}
};
答案 1 :(得分:2)
它将编译,但您无法创建实例。 MyQueue被认为是抽象的。
答案 2 :(得分:2)
你的MyQueue
子类也是抽象的,就像它的基类一样:因此,它不能实例化,而只是定义它(这是你所做的一切都很好!
答案 3 :(得分:1)
它编译得很好,因为编译器不知道你打算如何使用MyQueue
类。你定义它的方式,MyQueue
也是一个抽象类。如果您尝试仅使用它,则会出现编译错误