2014-11-22 57 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;