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 :

Classe mére abstraite; Comment instancier une classe fille?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 96
    Par défaut Classe mére abstraite; Comment instancier une classe fille?
    Bonjour,
    j'ai le plaisir ou le déplaisir de découvrir les joies du C++ en ce moment et je dois dire que les problemes sont nombreux. Tous résolvables (a peu près) j'en rencontre un qui me prend le choux...
    Merci par avance pour votre aide!

    Je dispose d'une classe mere:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
              class event
              {
                    private:
                            date _date;
                            string _objet;
                    public:
                           event(int j, int m, int a, const string & o);
                           ~event();
                           date get_event_1_jour_date();
                           string get_event_1_jour_objet();
                           virtual void affiche(std::ostream &f=std::cout)=0;
     
              };
    dont la déclaration du constructeur est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    event::event(int j, int m, int a, const string & o):_date(j,m,a), _objet(o)
         {std::cout<<"======"<<"Creat. event: "<<this<<"======"<<std::endl;};

    Je dispose d'une classe fille que je souhaite instancier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
              class event_1_jour:public event
              {
                    public:
                           event_1_jour(int j, int m, int a, const string & o);
                           ~event_1_jour();
     
              };

    la définition du constructeur est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    event_1_jour::event_1_jour(int j, int m, int a, const string & o):event(j,m,a,o)
         {std::cout<<"======"<<"Creat. event_1_jour: "<<this<<"======"<<std::endl;};

    je n'ai pas de bug à la compile jusuq'a ce que je place cela dans mon main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        event_1_jour e1(10,2,12,"jo");
    Il y a visiblement un probleme avec les constructeurs. Comment instancier la classe fille?


    merci bcp de votre aide!

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ca pourrait aider de voir le message d'erreur...

    Mais vu ton code, je dirais que tu as oublié de définir ta fonction virtuelle pure "affiche" dans la classe dérivée.

  3. #3
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    tu as oublié de définir ta fonction virtuelle pure "affiche" dans la classe dérivée.
    En effet: on ne peut pas instancier une classe virtuelle.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    En effet: on ne peut pas instancier une classe virtuelle.
    Classe abstraite. Seules les fonctions peuvent être virtuelles, dans ce contexte.

  5. #5
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Classe abstraite.
    Pardon, je me suis trop précipité.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 96
    Par défaut
    Mais vu ton code, je dirais que tu as oublié de définir ta fonction virtuelle pure "affiche" dans la classe dérivée.
    Effectivement, le probleme venait de la! Desole si la reponse parait évidente. J'emmagasine une tonne d'infos sur le C++ en ce moment. C'est difficile de ne pas passer à coté de certains concepts.

    Merci a tous!

  7. #7
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Tuto de base !

    Pour être instancier, une classe doit définir (concrétiser) toutes ses fonctions membres...

    de plus, il faut préciser comment l'héritage doit se faire pour le constructeur

    c'est à dire, il faut que tu déclares et définisses dans event_1_jour

    et que ton constructeur de event_1_jour soit défini de cette façon là (exemple, ça dépend de ton cas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    event_1_jour::event_1_jour(int j, int m, int a, const string & o) : event(j, m, a, o) { }
    Il y a eu un post là dessus, il n'y a pas longtemps
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

Discussions similaires

  1. [PHP 5.0] instancier une classe avec son nom dans une variable
    Par Nnay_ dans le forum Langage
    Réponses: 1
    Dernier message: 12/02/2009, 12h49
  2. comment compiler une classe sous linux qui implemente une interface
    Par nina08 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 19/11/2008, 08h43
  3. Réponses: 0
    Dernier message: 22/04/2008, 18h44
  4. Instancier une classe dont le nom est une variable
    Par bendev dans le forum Langage
    Réponses: 1
    Dernier message: 06/11/2006, 06h01
  5. Réponses: 2
    Dernier message: 15/06/2006, 12h37

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