在 C++ 中实例化抽象类
instantiate an abstract class in C++
我有一个抽象类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
按值获取T
,get
按值返回T
。
由于abs_class
是纯虚拟的,因此无法实例化。可以改用abs_class*
,也可以提供定义了getT
成员的继承类。
不能实例化抽象类。这意味着您不能使用:-
ICollection<abs_class> *eles;
但是,您可以这样做:-
ICollection<abs_class*> *eles;
相关文章:
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- C++包括类名间距和类实例化
- 如何使用其中一个具体类实例化抽象类?
- 不带尖括号的模板类实例化
- 使用父类实例化的向下转换对象
- 模板类实例化中的指针转换无效
- 类的私有成员在我的类实例化期间更改,即使他们不应该
- 反向函数不反转类实例化的引用字符串
- 在类实例化时生成一个数字
- 谷歌测试 - 为模板类实例化生成值
- 使用派生类实例化基类,而不在对象定义中使用指针
- 模板类实例化如何与类继承协同工作
- 枚举器而不是用于类实例化的构造函数
- 使用std :: make_shared抽象类实例化的错误
- 通过纯虚拟函数防止类实例化
- C 11枚举类实例化
- 阿达水果示例中的 Bizare 类实例化
- 从标头中的类实例化对象
- C++类实例化是否可以在运行时更改其大小
- 抽象类实例的动态初始化