在C ++中实例化一个抽象类

时间:2014-11-22 08:25:40

标签: c++ abstract-class

我有一个像这样的抽象类Icollection

using namespace std;

template <typename T>
class ICollection
{
public:
    virtual void add(T) = 0;
    virtual T get(int) = 0;
    virtual int count() = 0;
};

和派生类ArdalanCollection是这样的:

#include "iCollection.h"
#include <map>
template <typename T>
class ArdalanCollection :public ICollection<T>
{
public:
    ArdalanCollection(){
        index = 0;
    };
    virtual void add(T obj){
        encapsolateImplementation.insert(make_pair(index++, obj));
    };
    virtual T get(int index){
        return encapsolateImplementation[index];
    };

    virtual int count(){
        return index;
    }
private:
    int index;
    map < int, T > encapsolateImplementation;
};

现在我有另一个名为abs_class的抽象类,如下所示:

class abs_class
{
public:
    abs_class(){};
    virtual int getT(int) = 0;
protected:
    int Kg;
};

我想要做的是构建Icollection abs_class类型的对象,换句话说我想这样做:

ICollection<abs_class> *eles = new ArdalanCollection <abs_class>();

但我合理地得到了这个错误:

  

错误C2259:&#39; abs_class&#39; :无法实例化抽象类

有没有办法扭转这个错误?

2 个答案:

答案 0 :(得分:2)

您指定abs_class作为模板类型T,但T需要是可构造的,因为add按值T并且get按值返回T

由于abs_class是纯虚拟的,因此无法实例化。您可以改为使用abs_class*,或者提供已定义getT成员的继承类。

答案 1 :(得分:1)

您无法实例化抽象类。这意味着你无法使用: -

ICollection<abs_class> *eles;

但是你可以这样做: -

ICollection<abs_class*> *eles;