Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1182 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1512426
ippat
Posté le 09-02-2007 à 00:20:47  profilanswer
 

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
mood
Publicité
Posté le 09-02-2007 à 00:20:47  profilanswer
 

n°1513445
ippat
Posté le 12-02-2007 à 02:13:10  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
[RESOLU]Taille variante des cellules[résolu]Problème avec ExecuteExcel4Macro....
[CSS/JSP] Pb d'accès au style CSS via page JSP [Resolu][VB.NET] Windows Media Player sur PDA [RESOLU]
créer des jeux, fond d'écran et logo pour téléphones[RESOLU] Requete avec la date la plus proche de today
Comment programmer un écran de veille en java[RESOLU]Problème execution index.html
[Résolu] Récupérer le nom des champs d'une table MySQLProbleme avec des champs EDIT [ RESOLU ]
Plus de sujets relatifs à : [resolu]gros doute par rapport à l'affichage écran d'un code


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR