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

  FORUM HardWare.fr
  Programmation
  C++

  mot clef : explicit

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

mot clef : explicit

n°470352
Taz
bisounours-codeur
Posté le 28-07-2003 à 23:53:00  profilanswer
 

'explicit' est un mot clef trop souvent oublié pourtant il est tres utile En fait il force le compilateur à ne pas faire trop de zèle. Par exemple, vous avez une simple classe Foo qui a un constructeur Foo(int). Vous vous en servez allègrement pour faire des conversions implicites de int -> Foo, et ça vous convient très bien. seulement voilà, un jour vous avez un problème insoluble, ou vous voulez enpecher ces conversions implicites, ou tout simplement vous voulez mieux vous rendre compte du nombre de conversions implicites que fait votre compilateur? explicit est là! c'est un qualificateur pour les constructeurs qui se place jsute avant le nom de du constructeur.
 
petit exemple parlant. essayer avec et sans le explicit
 
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. class Foo
  4. {
  5.   int i;
  6.  
  7.   public:
  8.  
  9.   Foo()
  10.   {
  11.     cout << "Constructeur trivial" << " &" << &i << endl;
  12.   }
  13.  
  14.   /* explicit */ Foo(int j)
  15.    : i(j)
  16.   {
  17.     cout << "Constructeur i = " << i << " &" << &i << endl;
  18.   } 
  19.  
  20.   Foo(const Foo &f)
  21.     : i(f.i)
  22.   {
  23.     cout << "Constructeur par recopie i = " << i << " &" << &i << " (source &" << &f.i << ')' << endl;
  24.   }
  25.  
  26.   ~Foo()
  27.   {
  28.     cout << "~Destructeur i = " << i << " &" << &i << endl;
  29.   } 
  30.  
  31.   Foo& operator+=(const Foo &other)
  32.   {
  33.     this->i+=other.i;
  34.     return *this;
  35.   }
  36. };
  37. Foo operator+(const Foo &f, const Foo &g)
  38. {
  39.   cout << "operator+(Foo, Foo)" << endl;
  40.   Foo tmp(f);
  41.   tmp+=g;
  42.   return tmp;
  43. }
  44. Foo dawa(Foo f)
  45. {
  46.   return 0;
  47. }
  48. int main()
  49. {
  50.   Foo a;
  51.   Foo b(2);
  52.   Foo c=3;
  53.   Foo d(b);
  54.   b+4;
  55.  
  56.   dawa(5);
  57. }


mood
Publicité
Posté le 28-07-2003 à 23:53:00  profilanswer
 

n°470445
da_s_monk
Awwwww! Good Job!
Posté le 29-07-2003 à 08:29:50  profilanswer
 

Beau boulot Taz continue comme ça c sympa!

n°470520
HelloWorld
Salut tout le monde!
Posté le 29-07-2003 à 09:42:54  profilanswer
 

Si écrire des articles t'intéresse, tu devrais peut être faire le brouillon ici et mettre ça online sur ton site ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°509135
blackgodde​ss
vive le troll !
Posté le 06-09-2003 à 01:27:26  profilanswer
 

cool :) merci


---------------
-( BlackGoddess )-

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

  mot clef : explicit

 

Sujets relatifs
[PHP MySQL] Clef primaire multiple ?(prob. réglé + infos législation)2en1: mot-clef typeof() et coloration syntaxique pour le c++
qqn pour me faire mes exos -> Kdo a la clef[VB] indiquez la clef relative d un fichier relatif ?
PostGres : peut-on créer une double clef primaire ?Forum en PHP Qui peux me faire ça, remuneration a la clef
[ MySQL ] - - - selectionner 16 derniers enregist. - sans clef prim.[C++] A quoi sert le mot clef volatile ?
Plus de sujets relatifs à : mot clef : explicit


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