2017-06-14 6 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. を得ることはできません。私がやろうとしている何

    です:

    1. 彼らはの配列をループすることができるようにするベクトル要素
    2. の異なる数が含まれていますので、私の子クラスは、ベクトルを上書きしますBaseClass*には、宣言された子クラスのアドレスが含まれ、ベクトルのデータの2番目のループが含まれます。

    私はそれを正しくやっていますか?前もって感謝します!

    注:私は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のプライベートベクターを派生クラスのメンバーとして追加することができます –

    関連する問題