2014-11-22 58 views
-2

一个抽象类,我有一个抽象类Icollection这样的:实例在C++

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

,但我有理由得到这个错误:

error C2259: 'abs_class' : cannot instantiate abstract class

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

回答

2

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

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

+0

是啊其实我已经做了你的第二个补救措施,但不知何故,我需要使用你的第一个!感谢您的解释。 – Alexander1991 2014-11-22 08:36:04

1

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

ICollection<abs_class> *eles; 

但是你可以这样做: -

ICollection<abs_class*> *eles;