在 C++ 中实例化抽象类

instantiate an abstract class in C++

本文关键字:抽象类 实例化 C++      更新时间:2023-10-16

我有一个抽象类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;
};

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

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

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

错误 C2259:"abs_class":无法实例化抽象类

有什么办法可以扭转这个错误吗?

您指定abs_class作为模板类型T,但T必须是可构造的,因为add按值获取Tget按值返回T

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

不能实例化抽象类。这意味着您不能使用:-

ICollection<abs_class> *eles;

但是,您可以这样做:-

ICollection<abs_class*> *eles;