0

我有以下类定义:

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课堂上实现。知道为什么吗?

4

4 回答 4

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() {}
};
于 2010-04-07T01:24:12.180 回答
2

它会编译,但你不能创建实例。MyQueue 被认为是抽象的。

于 2010-04-07T01:23:36.210 回答
2

您的MyQueue子类也是抽象的,就像它的基类一样:因此,它不能被实例化,但只需定义它(这就是您所做的一切)就可以了!

于 2010-04-07T01:24:16.553 回答
1

它会编译得很好,因为编译器不知道你打算如何使用这个MyQueue类。您定义它的方式MyQueue也是一个抽象类。如果您尝试仅使用它,您将收到编译错误

于 2010-04-07T02:30:15.803 回答