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 :

gros doute sur l'affichage d'un programme


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Par défaut gros doute sur l'affichage d'un programme
    Bonsoir tout le monde

    J'ai un examen de c++ demain et je suis entrain de m'entrainer sur des annales de l'épreuve et je suis tombé sur un exercice où il faut lire le code et deviner ce qu'il affiche.

    Hors le code n'affiche pas du tout ce à quoi je m'attendais donc je voudrais avoir la confirmation que l'affichage est correct et que il n'y a pas d'erreur qui viennent du compilateur (j'utilise devcpp-4.9.9.2).

    Donc voici le code en question :

    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
     
    #include<iostream.h>
    class Base
    {
          public:
                 Base(int pipo) {i=8;}
                 Base(float pipo) {cout<<12<<" ";}
                 ~Base(){cout<<42<<" ";}
                 void operator=(int pipo) {i=pipo;}
                 virtual int m(){return 11;}
                 int i;
    };
     
    class Derive : public Base
    {
          public :
                 Derive():Base(10){}
                 Derive(int pipo):Base(1.0f){cout<<19<<" "<<pipo<<" ";}
                 ~Derive(){cout<<41<<" ";}
                 friend ostream& operator<<(ostream &s, const Derive pipo)
                 {s<<20<<" ";}
                 int m() {return 13;}
                 int n() const{return 31;}
                 int n(){return 37;}
    };
     
    main()
    {
          Base x(1);
          cout<<"a: "<<x.i<<endl;
          Base y=2;
          cout<<"b: "<<y.i<<endl;
     
          Derive z;
          Base &r = z;
     
          cout<<"c: "<<r.m()<<endl;
          cout<<"d: "<<Derive(15)<<endl;
          cout<<"e: "<<z.n()<<endl;
     
          int i;
          cin>>i;
    }
    et voila l'affichage correspondant apres execution du programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    a: 8
    b: 8   /*ici d'apres le code  je m'attendais à ce que ca affiche "b:2" car y.i=2 selon moi*/
    c: 13
    12 19 15 d: 20 /*ici je m'attendais à "d: 12 19 15 20"*/
    41 42 e: 37 /*ici je m'attendais à "e:37" je ne sais pas qu'elle est l'instance qui appelle les destructeurs*/
    Voila si vous pouviez me donner votre avis sur l'exactitude de l'affichage, ce serait sympa.

    Merci d'avance et bonne soirée

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          Base y=2;
          cout<<"b: "<<y.i<<endl;
    Il s'agit bien ici d'un appel à un constructeur et non à l'opérateur d'affectation. Pour appeler cet opérateur, il aurait fallu quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cout<<"d: "<<Derive(15)<<endl;
    Tous les arguments d'une fonction (ici les opérateurs << ) sont évalués avant l'appel à la fonction. Donc Derive(15) est construit, puis les opérateurs << de l'affichage sont appelés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cout<<"e: "<<z.n()<<endl;
    L'affichage du 41 et du 42 sont liés à la destruction de la variable temporaire Derive(15) de la ligne précédente.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Par défaut
    Merci roulious d'avoir répondu aussi rapidement !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/04/2015, 02h12
  2. Doute sur affichage N° semaine
    Par aerane dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 16/05/2013, 10h49
  3. [C#] Besoin d'aide sur l'affichage d'une combobox
    Par dcd3 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 08/10/2005, 00h43
  4. [win XP] [DOS] Pblm affichage d'un programme DOS
    Par jesus144 dans le forum Windows XP
    Réponses: 11
    Dernier message: 20/02/2005, 23h32
  5. [Stratégie][JSP][Bean] Question sur l'affichage
    Par ArseNic dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 07/02/2005, 11h19

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