2017-06-14 4 views
0

Je suis en train de créer une classe de base abstraite que j'ai l'intention les classes dérivées d'implémenter un membre vector<int>. Mon problème est que si je tente de le faire:Classe de base avec un vecteur <int> member

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

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

    //and so on..... 
} 

Je reçois

  1. « virtuelle » interdit sur les déclarations de données
  2. « virtuel » est pas autorisée.

Ce que je suis en train de faire est:

  1. faire mes classes d'enfants remplacent le vecteur parce qu'ils contiennent un nombre différent des éléments vectoriels
  2. Pour pouvoir faire une boucle à travers un réseau de BaseClass* contenant les adresses des classes enfants déclarées, et la deuxième boucle pour les données des vecteurs.

Est-ce que je le fais de la bonne façon? Merci d'avance!

Remarque: Je n'ai aucune expérience antérieure dans le codage en C++.

+2

Les données de membre ne peuvent pas être virtuelles ou remplacées car elles sont des données. De plus, 'vector' est déjà redimensionnable à l'exécution. –

Répondre

3

Est-ce que je le fais de la bonne façon?

n °

Comme le compilateur vous permet de savoir, vous pouvez avoir virtual fonctions membres, mais pas virtual variables membres.

Modifiez les variables membres en fonctions membres et assurez-vous de les implémenter correctement dans les classes dérivées.

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

Pour l'exhaustivité, vous pouvez ajouter un vecteur privé de ChildData en tant que membre de la classe dérivée –