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() {}
};

constructItem()これはVS2005で正常にコンパイルされますが、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 に答える