[resolu]gros doute par rapport à l'affichage écran d'un code

gros doute par rapport à l'affichage écran d'un code [resolu] - C++ - Programmation

Marsh Posté le 09-02-2007 à 00:20:47    

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 :
  1. #include<iostream.h>
  2. class Base
  3. {
  4.       public:
  5.              Base(int pipo) {i=8;}
  6.              Base(float pipo) {cout<<12<<" ";}
  7.              ~Base(){cout<<42<<" ";}
  8.              void operator=(int pipo) {i=pipo;}
  9.              virtual int m(){return 11;}
  10.              int i;
  11. };
  12. class Derive : public Base
  13. {
  14.       public :
  15.              Derive():Base(10){}
  16.              Derive(int pipo):Base(1.0f){cout<<19<<" "<<pipo<<" ";}
  17.              ~Derive(){cout<<41<<" ";}
  18.              friend ostream& operator<<(ostream &s, const Derive pipo)
  19.              {s<<20<<" ";}
  20.              int m() {return 13;}
  21.              int n() const{return 31;}
  22.              int n(){return 37;}
  23. };
  24. main()
  25. {
  26.       Base x(1);
  27.       cout<<"a: "<<x.i<<endl;
  28.       Base y=2;
  29.       cout<<"b: "<<y.i<<endl;
  30.      
  31.       Derive z;
  32.       Base &r = z;
  33.      
  34.       cout<<"c: "<<r.m()<<endl;
  35.       cout<<"d: "<<Derive(15)<<endl;
  36.       cout<<"e: "<<z.n()<<endl;
  37.      
  38.       int i;
  39.       cin>>i;
  40. }


 
et voila l'affichage correspondant apres execution du programme :
 

Code :
  1. a: 8
  2. b: 8   /*ici d'apres le code  je m'attendais à ce que ca affiche "b:2" car y.i=2 selon moi*/
  3. c: 13
  4. 12 19 15 d: 20 /*ici je m'attendais à "d: 12 19 15 20"*/
  5. 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


Message édité par ippat le 12-02-2007 à 02:13:51
Reply

Marsh Posté le 09-02-2007 à 00:20:47   

Reply

Marsh Posté le 12-02-2007 à 02:13:10    

Code :
  1. Base y=2;
  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 :
  1. Base y;
  2. y=2;


 
 

Code :
  1. 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 :
  1. 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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed