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

C++ Discussion :

Petit problème d'héritage


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par défaut Petit problème d'héritage
    Bonjour,
    Voici le problème auquel je suis confronté. J'ai une classe Abstraite (donc virtuelle pure) et une classe qui Fille qui hérite de la classe Abstraite. La classe Fille réimplémente bien les méthodes virtuelles pures, mais ne réimplémente pas toutes les autres méthodes de la classe Abstraite.
    J'instancie un pointeur du type de la Classe Fille et lorsque j'essaie d'accéder à une méthode de la classe Abstraite que la classe Fille n'a pas réimplémenté, j'ai une erreur de compilation.

    Voici le code ( il est ici simplifié au maximum mais montre bien le problème )
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    #include <string>
     
    using namespace std;
     
    class Abstraite
    {
    	public:
    	  void fonction(string Fichier) 
    		{
    			std::cout << "Abstraite::fonction(std::string Fichier)" << Fichier << std::endl;
    		}
     
    		virtual void fonction(int i)
    		{
    			std::cout << "Abstraite::fonction()" << i << std::endl;
    		}
     
    		virtual void abstraction() = 0;
    };
     
    class Fille : public Abstraite
    {
    	public:
    		virtual ~Fille() 
    		{
    			std::cout << "Fille::~Fille()" << std::endl;
    		}
     
    		virtual void fonction(int i)
    		{
    			std::cout << "Fille::fonction()" << i << std::endl;
    		}
     
    		void abstraction()
    		{
    			std::cout << "Fille::abstraction()" << std::endl;
    		}
    };
     
    int main (int arcg, char* argv[])
    {
    	Fille* ptrFille = new Fille();
    	ptrFille->fonction(std::string("Ma Phrase"));
     
    	return 0;
    }
    et voici l'erreur du compilateur
    test.cpp: In function 'int main(int, char**)':
    test.cpp:44: erreur: no matching function for call to 'Fille::fonction(std::string)'
    test.cpp:30: note: candidats sont: virtual void Fille::fonction(int)
    J'utilise le compilateur :
    g++ (GCC) 4.2.2
    Copyright © 2007 Free Software Foundation, Inc.
    Ce logiciel est libre; voir les sources pour les conditions de copie. Il n'y a PAS
    GARANTIE; ni implicite pour le MARCHANDAGE ou pour un BUT PARTICULIER.
    sous Linux RHLE 5.4.

    Petites remarques que je ne m'explique pas :
    1. Si je supprime la méthode fonction(int i) des deux classes, le prgramme compile
    2. Si je caste le pointeur en un pointeur de type Abstraite, le programme compile

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Regarde cette entrée de la FAQ.

    MAT.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par défaut
    Merci, celà m'a permis d'avancer un peu sur la compréhension du phénomène, mais je ne comprend pas pourquoi la fonction de la classe fille masque celle de la classe mère, pour moi toutes les fonctions se retrouvaient dans la classe fille et étaient traitées comme une fonction polymorphique.

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par andnicam Voir le message
    Merci, celà m'a permis d'avancer un peu sur la compréhension du phénomène, mais je ne comprend pas pourquoi la fonction de la classe fille masque celle de la classe mère, pour moi toutes les fonctions se retrouvaient dans la classe fille et étaient traitées comme une fonction polymorphique.
    La norme le dit : à partir du moment ou un fonction est présente dans une classe dérivée, elle cache toutes les fonctions ayant le même nom présente dans les classes mères. Du coup, tu n'as pas besoin de comprendre, c'est quelque chose qu'on t'impose

    Un petit coup de using et hop, le problème est réglé !
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par défaut
    Merci.

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

Discussions similaires

  1. Petit Problème d'héritage?
    Par Enjaye dans le forum C++
    Réponses: 9
    Dernier message: 14/11/2012, 14h48
  2. Petit problème d'héritage
    Par ohichamo dans le forum C++
    Réponses: 3
    Dernier message: 04/07/2012, 10h21
  3. Petit problème d'héritage.
    Par tifil dans le forum C++
    Réponses: 19
    Dernier message: 08/03/2012, 18h04
  4. Héritage : petit problème
    Par Fy_Hertz dans le forum C++
    Réponses: 20
    Dernier message: 31/01/2006, 08h39
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

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