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 :

Sauvez des vies avec votre connaissance du C++ !


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Points : 12
    Points
    12
    Par défaut Sauvez des vies avec votre connaissance du C++ !
    Titre bizarre, laissez-moi l'expliciter : les partiels arrivant bientôt (en fait le Java/C++ c'est demain), j'ai déniché les sujets partiels de l'année dernière et il semblerait que ce soit une excellente base pour bosser.

    La partie Java c'est bon, par contre le C++ est un peu plus chaud, on l'a mal étudié et couplé au Java c'est facile de s'emmêler. Je vous demande donc humblement un coup de main pour résoudre les exercices de cette feuille :
    http://phiphyl.free.fr/c++1.jpg
    Ca pourrait sauver la moyenne de pas mal de monde ^^

    Pour l'ex1, je bloque au *s2 = c, je ne me souviens plus comment on doit l'interprêter. Du coup, je bloque à tout en fait

    S'il y a une âme charitable qui veut réaliser sa BA de la journée, toute aide est la bienvenue !

  2. #2
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    ça fait appel au polymorphisme, qui est une des bases de tout langage orienté objet.
    Ça veut dire que tu considère ton objet s2 (qui est un Circle normalement) comme un Shape.
    L'affichage donne :
    Citation Envoyé par Affichage
    1
    2
    1
    Alors que si on met le mot clé virtual dans Shape (encore une notion de base), le polymorphisme peut librement s'exprimer... (ce que suggère la question 2 )

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    En complément, on peut insister sur le fait que, en Java, toutes les méthodes sont d'office virtuelles.

    Ainsi, en java, il te suffit de redéfinir une méthode héritée de la classe de base pour que ce soit d'office ce nouveau comportement qui soit pris en compte dans le cadre du polymorphisme.

    en C++, ce n'est pas le cas.

    Si tu n'indique pas explicitement que ta méthode est virtuelle, elle ne l'est pas.

    Cela implique que si tu redéfini une méthode héritée de la classe de base, mais que tu n'indiques pas qu'elle est virtuelle dans la classe de base, et que tu demande au compilateur de considérer une variable d'un type dérivé comme s'il s'agissait d'un type de base, ce sera bel et bien le comportement du type de base qui sera appliqué.

    Au final, il est nécessaire de déclarer toutes les méthodes qui sont susceptibles d'être redéfinies dans un but de polymorphisme comme étant virtuelles en C++.

    Bien qu'une méthode déclarée au départ comme virtuelle le reste dans les classes dérivées, il est également souhaitable (histoire de permettre au lecteur du code de s'en rappeler) de rappeler le mot clé virtual dans les classes dérivées qui fournissent un comportement adapté au type réel.

    Par contre, il est déconseillé de déclarer une méthode qui ne devra jamais être réimplémentée comme étant virtuelle, car les mécanismes que cela implique au niveau de l'exécutable (création d'une VTable et déréférencement supplémentaire entre autres) ont malgré tout un cout au niveau des performances générales (que ce soit en temps d'exécution ou en taille de l'exécutable) même si le cout peut être considéré comme infime dans de nombreux cas.

    De plus, le fait de déclarer une méthode comme étant virtuelle peut induire dans le chef du lecteur du code l'idée fausse que la méthode en question est susceptible d'être réimplémentée
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Oui effectivement bien vu Koala. J'aurai du expliquer un peu mieux.
    Celà dit, il m'est déjà arriver de mettre des virtual à des fonctions qui ne devaient pas en avoir juste à cause de l'utilisation d'un Proxy par la suite.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    1.1 : comme dit poukill
    1.2 : il faut mettre un virtual à la méthode draw. De par le fait qu'on utilise du polymorphisme il serait aussi une très bonne idée de déclarer un destructeur virtuel dans la classe de base (petit rappel sur certains compilateurs comme gcc qui ont la bonne idée d'afficher un warning si on déclare une méthode virtuelle dans une classe dénuée de destructeur virtuel - ce n'est pas standard mais ça aide bien des développeurs qui l'oublient ou tout simplement ne savent pas que c'est nécessaire dans la plupart des cas)
    1.3 : l'affichage devient alors ce qu'on aurait attendu dans un langage full-object: 1 2 2

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/09/2014, 14h53
  2. [Article] Optimisez le chargement des images de votre site avec les Sprites CSS
    Par Bovino dans le forum Publications (X)HTML et CSS
    Réponses: 2
    Dernier message: 07/12/2009, 00h15
  3. Réponses: 2
    Dernier message: 07/12/2009, 00h15
  4. Réponses: 1
    Dernier message: 16/08/2006, 13h30

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