IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Template + Héritage


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Par défaut Template + Héritage
    Rebonjour à tous.

    Voilà, je vais tenter de faire au plus court.

    J'ai une série de classe héritant l'une de l'autre, et je souhaiterais les placer dans un Vecteur template.
    Je m'explique:

    J'ai une classe Personne, qui est la classe mère principale. Ensuite, j'ai une classe MembrePersonnel qui hérite de la classe Personne.
    Après celà, j'ai une série de classes, PersonnelScientifique, PersonnelAdministratif, PersonnelSurveillant, ... héritant toutes de la classe MembrePersonnel et donc aussi de la classe Personne (indirectement).

    Voilà, maintenant je dois mettre en place un Vecteur template qui va contenir des pointeurs vers les différentes personnes étant membres du personnel ainsi que les personnels administratif, scientifique, ...

    Pour ce faire, je procède de la façon suivante dans ma classe Vecteur:

    pour le .h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    #ifndef _VECTEUR
    #define _VECTEUR
     
    #include<string>
     
    #include"./piecemusee/piecemusee.h"
    #include"./piecemusee/piecemuseeart.h"
    #include"./personne/membrepersonnel.h"
    #include"./personne/personneladministratif.h"
    #include"./personne/personnelscientifique.h"
    #include"./personne/personnelsurveillant.h"
     
    template <class T> class Vecteur
    {
    private:
    	T *Data;
    	int nbrElem;
    	int *Index;
    public:
    	// constructeur
    	// d'initialisation
    	Vecteur(int n = 20 );
     
    	// destructeur
    	~Vecteur(void)
    	{
    		delete[] Data;
    	}
     
    	// methodes d'acces au variables et de construction d'index
    	T& operator[](int i){ return *(Data+i);};
    	int placelibre();
    	void setindex(int N, int NV){	Index[N] = NV; }
    	int getindex(int N){	return Index[N];	}
     
    };
    #endif
    pour le .cxx:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    #include"Vecteur.h"
     
    template <class T>
    Vecteur<T>::Vecteur( int n )
    {
    	Data = new T[n];
    	nbrElem = n;
     
    	Index = new int[n];
    	for( int i = 0; i < n; i++)
    		Index[i] = 0;
    }
     
    template <class T>
    int Vecteur<T>::placelibre()
    {
    	int i;
    	for( i = 0; i<nbrElem && Index[i] != 0; i++);
     
    	if( i >= nbrElem )
    		i = -1;
    	return i;
    }
     
    template class Vecteur<piecemusee>;
    template class Vecteur<piecemuseeart>;
    template class Vecteur<int>;
    template class Vecteur<membrepersonnel>;
    template class Vecteur<membrepersonnel*>;
    template class Vecteur<personneladministratif*>;
    template class Vecteur<personnelscientifique*>;
    template class Vecteur<personnelsurveillant*>;
    Je pense qu'il n'y a pas d'erreur dans le code précédent. Dans le main, je procède comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // déclaration de mon Vecteur
    Vecteur<membrepersonnel *> VMP(10);
     
    // création d'un nouvel élément
    VMP[imp] = new personneladministratif();
    // saisie de l'élément créé
    VMP[imp]->insert();
    // incrémentation du nombre d'élément
    imp++;
    Par contre, lorsque j'exécute mon code, il ne me propose pas de saisir les données propres au personneladministratif, il s'arrête à la saisie du membrepersonnel.

    Est ce que pour résoudre ce problème, je dois faire un casting quelque part? Si oui, où?
    Ou alors est ce que je dois déclarer mon Vecteur différement? Parce que en fait je dois réussir à mettre toutes les valeurs de membrepersonnel et celle qui en hérite dans le même vecteur.

    J'espère ne pas m'être embrouiller dans les explications de mon problème, et vous remercie d'avance pour l'aide que vous pourrez m'appoter.

    Richard_sraing

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    C'est normal.

    Il faut que tu utilises dans ton cas le polymorphisme d'exécution.

    C'est à dire que tu dois manipuler des Vecteur<Personne*> et définir tes fonctions de Personne ainsi que son destructeur comme virtuels et les redéfinir dans les classes fills pour que la saisie par exemple soit différente selon le type.

    Tu as compris ?

  3. #3
    Membre éclairé Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Par défaut
    mouais, ça a pas l'air super facile comme truc, et en plus en ce qui concerne les méthodes virtuelle j'ai jamais compris le truc

    Je vais essayer de m'y mettre et de repotasser mn cours théorique à la recherche de quelque chose d'utilisable à ce sujet.

    Merci pour le conseil en tout cas.

    Aller, ACTION

  4. #4
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575

  5. #5
    Membre éclairé Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Par défaut
    C'est vraiment bizarre, parfois les choses parraissent plus compliquées qu'il ne l'est vraiment. Il m'a suffit de rajouter un virtual devant les méthodes de ma classe personne, et ploum, tout passe comme il faut.

    Halicinant.

    Merci de l'astuce Alp

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [template]Héritage d'une Template par une Classe
    Par koni33 dans le forum Langage
    Réponses: 0
    Dernier message: 11/05/2008, 14h12
  2. Réponses: 2
    Dernier message: 05/01/2008, 23h39
  3. Templates + Héritage + Allocation dynamique
    Par bouba dans le forum C++
    Réponses: 2
    Dernier message: 26/04/2007, 17h56
  4. Template, héritage multiple et redéfinition
    Par Paul Atreide dans le forum Langage
    Réponses: 5
    Dernier message: 31/10/2006, 14h00
  5. template, héritage et std:deque
    Par jmtrivial dans le forum Langage
    Réponses: 7
    Dernier message: 27/09/2006, 15h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo