Les constructeurs servent aussi bien entendu pour les conversions:
class X{ // ... public: X(int); X(const char*); }; void f(X); //... void g(){ X a=1; // a=X::X(1) X b="ufr"; // b=X::X("ufr"); f(2); // f(X::X(2)) a=2; // a=X::X(2) }
En particulier il ne faut pas oublier que la conversion concernera tous les opérateurs (en particulier l'affectation).
Mais attention, les conversions définies par l'utilisateur ne peuvent se faire qu'à un seul niveau :
class Y{ public: Y(const X); }; void g(Y); //... void essai(){ Y y=1; // illegal Y y=(X)1; g(1); // illegal }Les règles de conversion seront étudiées avec plus de détail dans le chapitre sur la surcharge.