mot clef : explicit

mot clef : explicit - C++ - Programmation

Marsh Posté le 28-07-2003 à 23:53:00    

'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. }


Reply

Marsh Posté le 28-07-2003 à 23:53:00   

Reply

Marsh Posté le 29-07-2003 à 08:29:50    

Beau boulot Taz continue comme ça c sympa!

Reply

Marsh Posté le 29-07-2003 à 09:42:54    

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
Reply

Marsh Posté le 06-09-2003 à 01:27:26    

cool :) merci


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

Sujets relatifs:

Leave a Replay

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