2017-06-14 47 views
0

我試圖創建一個抽象基類,我打算派生類實現vector<int>成員。我的問題是,如果我嘗試這樣做:帶有矢量的基類<int>成員

class BaseClass 
{ 
public: 
    virtual int GetCount() = 0; 
    virtual vector<int> ChildData; 
} 

class CID1 : public BaseClass 
{ 
public: 
    int GetCount() 
    { 
     return 3; 
    } 

    //and so on..... 
} 

我得到

  1. 「虛擬」的數據聲明不允許
  2. 「虛擬」是不允許的。

我試圖做的是:

  1. 讓我的孩子類覆蓋了載體,因爲它們將通過數組包含不同數量的矢量元素的
  2. 爲了能夠循環BaseClass*包含聲明的子類的地址,以及矢量數據的第二個循環。

我在做正確的方法嗎?提前致謝!

注意:我沒有使用C++進行編碼的經驗。

+2

成員數據不能是虛擬的或被覆蓋,因爲它們是數據。另外,'vector'已經可以運行時調整大小。 –

回答

3

我正確的做法嗎?

當編譯器讓你知道,你可以有virtual成員函數而不是virtual成員變量。

將成員變量更改爲成員函數,並確保在派生類中正確實現它們。

class BaseClass 
{ 
    public: 
     virtual int GetCount() = 0; 
     virtual vector<int>& GetChildData() = 0; 
} 

class CID1 : public BaseClass 
{ 
    public: 

     // virtual keyword is not necessary here 
     // but helps with understanding code. 
     virtual int GetCount() 
     { 
     return 3; 
     } 

     virtual vector<int>& GetChildData() 
     { 
     return data; 
     } 

    private: 
     vector<int> data; 

} 
+1

爲了完整性,您可以添加ChildData的私有向量作爲派生類的成員 –