Problème de pointeur objet mère qui pointe sur objet fille

Problème de pointeur objet mère qui pointe sur objet fille - C++ - Programmation

Marsh Posté le 22-03-2008 à 20:57:40    

Bonsoir à tous
 
J'ai une classe mère : SecteurDActivite, et 5 classes filles (Agroalimentaire, Energie, Industrie, Tourisme, Transport). J'ai crée un pointeur S de SecteurDActivite de taille 5 que j'ai initialisé comme suit:

Code :
  1. // Création des secteurs dactivités:
  2. Agroalimentaire agroalimentaire(nombreDePeriode);
  3. Energie energie(nombreDePeriode);
  4. Industrie industrie(nombreDePeriode);
  5. Tourisme tourisme(nombreDePeriode);
  6. Transport transport(nombreDePeriode);
  7. // Création du pointeur de secteur d'activités:
  8. SecteurDActivite* S=new SecteurDActivite[nombreDeSecteurDActivite];
  9. S[0]=agroalimentaire;
  10. S[1]=energie;
  11. S[2]=industrie;
  12. S[3]=tourisme;
  13. S[4]=transport;


 
J'ai une méthode que je dois utiliser pour chaque secteur d'activité, mais qui est différente pour chaque secteur.
Dans la classe SecteurDActivite je l'ai donc créé en virtual et je n'ai rien mis dedans :

Code :
  1. class SecteurDActivite :
  2. {
  3.      virtual void calculImpactAleas(int periode, Aleas A, Entreprise* E, Marche* M){};
  4. };


 
et je l'ai ensuite mise dans chacune des classes filles avec une implémentation différente.
 
Cependant lorsque j'execute mon programme principale dont la partie du code intéressante est la suivante :  
 

Code :
  1. for (int s=0; s<nombreDeSecteurDActivite; s++) S[s].calculImpactAleas(i, alea, E, M);


 
le programme utilise la méthode de la classe SecteurDActivite, et non celles des classes filles, comme le montre l'execution du programme ( j'ai mis des cout<<endl<<__PRETTY_FUNCTION__<<"adr objet : "<<this;  dans l'implémentation des méthodes)
 
virtual void SecteurDActivite::calculImpactAleas(int, Aleas, Entreprise*, Marche*)adr objet : 0x83502b4
virtual void SecteurDActivite::calculImpactAleas(int, Aleas, Entreprise*, Marche*)adr objet : 0x835030c
virtual void SecteurDActivite::calculImpactAleas(int, Aleas, Entreprise*, Marche*)adr objet : 0x8350364
virtual void SecteurDActivite::calculImpactAleas(int, Aleas, Entreprise*, Marche*)adr objet : 0x83503bc
virtual void SecteurDActivite::calculImpactAleas(int, Aleas, Entreprise*, Marche*)adr objet : 0x8350414
 
 
Pouvez-vous m'aider s'il vous plait?
 
Je vous remercie d'avance

Reply

Marsh Posté le 22-03-2008 à 20:57:40   

Reply

Marsh Posté le 22-03-2008 à 21:12:37    

Le polymorphisme n'opére que sur poineurs et références.
 

Code :
  1. std::vector<SecteurDActivite*> secteurs(5);
  2. secteurs[0] = new Agroalimentaire(nombreDePeriode);
  3. secteurs[1] = new Energie(nombreDePeriode);
  4. secteurs[2] = new Industrie(nombreDePeriode);
  5. secteurs[3] = new Tourisme(nombreDePeriode);
  6. secteurs[4] = new Transport(nombreDePeriode);
  7. for (int s=0; s<secteurs.size(); ++s) secteurs[s]->calculImpactAleas(i, alea, E, M);

Reply

Marsh Posté le 22-03-2008 à 21:27:59    

Merci beaucoup, je viens de modifier et ça marche.
Par contre j'ai du modifier ta synthaxe car j'avais un message d'erreur qui ne reconnaissait pas vector, et l'écriture qui suit. J'ai donc créé un pointeur de pointeur à la place (ce qui revient au même).

Reply

Marsh Posté le 22-03-2008 à 23:05:19    

... ouasi enfin
 
#include <vector>  
 
quoi :[ la STL c'ets la base :o
Les gens qui font des tableaux avec pointeurs en C++ méritent le pal et le retrait de la CAF.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed