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 :

[Débutant] Problème de liaison dynamique


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 10
    Par défaut [Débutant] Problème de liaison dynamique
    Bonjour, j'ai le code suivant :

    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
     
    class A{
    public:	
    	virtual void Draw(){std::cout<<"lalala A\n";}
            A(){};
           ~A(){};
    };
     
    class B :public A{
    public:	
    	virtual void Draw(){std::cout<<"lalala B\n";}
            B(){};
            ~B(){};
    };
     
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	B *b=&B();
    	b->Draw();
    	return 0;
    }
    Je ne comprends pas pourquoi c'est le A::draw qui est appelé et non B::draw. Et pourquoi quand j'enlève le destructeur de la classe A, là ça marche...
    Merci de m'aider !
    a+

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Par défaut
    Salut

    D' après ce que j' ai vu tu ne fait pas par exemple d' allocation mémoire dans ta classe.je ne vois pas à quoi cela pourrait te servir?.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par El Zeru Voir le message
    Il faut comprendre ce que fait cette ligne :
    - B() : Tu crées un objet B temporaire
    - &B() : Tu en prends l'adresse
    - B *b = &B() : Tu stoke l'adresse dans un pointeur
    - B *b = &B(); : A la fin de l'instruction, le temporaire est détruit. Donc faire b-> devient un comportement indéfini. Il se trouve que dans ton cas, selon la manière dont les destructeurs sonts définis, tu as l'impression de voir quelque chose ou autre chose, mais à la base, le programme aurait tout autant le droit de planter sans autre forme de procès. Ou, plus sournois, de donner l'impression de marcher, et de causer un bug plus tard, à un endroit qui n'a aucun rapport.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 10
    Par défaut
    Merci de vos réponses. Dans mon programme j'ai une classe mère A et deux filles B et C. J'ai fait un container qui contient à la fois de B et des C et je veux faire un traitement automatisé du container quelques soient ses éléments. J'ai donc pensé faire un container de pointeurs sur A qui pointent vers des B ou des C, mais comme vu dans mon post, ça ne marche pas comme je le voudrais...
    Que dois-je faire ?

    Merci d'avance.
    a+

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Tout comme dans l'exemple simplifié il y avait une erreur, montres nous comment tu définis puis construit ton conteneur et comment tu invoques la méthode.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 10
    Par défaut
    J'ai donc la hierarchie suivante de classes :
    Obj--->Objfich--->Obj3D
    |--->Objprim

    L'idée est de pouvoir stocker et utiliser indifféremment des Obj3D et des Objprim...Ici le constructeur permet d'initialiser une géométrie 3D à partir d'un objet. Objprim concerne les primitives de Glut.

    En global :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::vector<Obj *> Objs;
    Puis dans une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         char * fich="stanbunny.mxa";
         Objs.push_back(&Obj3D(fich));
         Objs[0]->Draw();
    Merci d'avance.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par El Zeru Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         Objs.push_back(&Obj3D(fich));
    Exactement la même cause que t'a expliqué JolyLoic juste au-dessus.

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

Discussions similaires

  1. Problème de liaison dynamique
    Par Franck.H dans le forum ASP.NET
    Réponses: 8
    Dernier message: 15/01/2014, 11h35
  2. Problème de liaison de librairie dynamique
    Par mithrendil dans le forum C#
    Réponses: 2
    Dernier message: 15/06/2011, 23h12
  3. Réponses: 0
    Dernier message: 03/01/2010, 13h40
  4. [Débutant] Problème colonnes dynamiques GridView
    Par NiamorH dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 01/10/2008, 13h56
  5. [débutant] Problème de liaison un à plusieurs
    Par Anthony17 dans le forum Access
    Réponses: 7
    Dernier message: 02/05/2006, 14h11

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