[c++] syntax constructeur

syntax constructeur [c++] - C++ - Programmation

Marsh Posté le 24-06-2003 à 16:51:24    

voila c une question de kazi noob :
 

Code :
  1. class truc {
  2. public:
  3.    truc (int v) : val (v) {}
  4. private:
  5.    int val;
  6. };


 
je comprends pas du tout le val(v)
ca ressemble à un appel de fonction; ca fait val=v;  
 
qq pourrait-il m'expliquer ce que c'est ? jusqu'à quel point on peut utiliser ce genre de syntax ?
 
(c surement tout bete, mais je vois pas)
 

Reply

Marsh Posté le 24-06-2003 à 16:51:24   

Reply

Marsh Posté le 24-06-2003 à 16:59:46    

Ben en fait ça s'apparente à un appel du contructeur pour initialiser ton membre. Donc les objets initialiser comme ça doivent avoir un constructeur de recopie pour que ça marche. Pour les types atomique ça marche comme une affectation.
 
Attention si tu utilise cette méthode tu dois initialiser les membres dans l'ordre de leur déclaration.


---------------
Le Tyran
Reply

Marsh Posté le 24-06-2003 à 17:05:32    

C'est tout simple, ça appelle le constructeur de val prenant comme paramètre v.
 
Un petit exemple:

Code :
  1. class Foo
  2. {
  3. public:
  4. Foo() : val_(0) {}
  5. Foo( const Foo& foo ) : val_( foo.val_ ) {}
  6. Foo& operator=( const Foo& foo ) { val_ = foo.val_; return *this; }
  7. protected:
  8. int val_;
  9. };
  10. class Bar
  11. {
  12. Bar( Foo& foo ) : f_(foo) {}
  13. protected:
  14. Foo f_;
  15. };
  16. class Gee
  17. {
  18. Gee( Foo& foo ) { f _= foo; }
  19. protected:
  20. Foo f_;
  21. };
  22. int main( int argc, char *argv[] )
  23. {
  24. Foo f;
  25. Bar b(f); // appelle Foo::Foo(f)
  26. Gee g(f); // appelle Foo::Foo() puis Foo::operator=(f)
  27. return 0;
  28. }


---------------
each day I don't die is cheating
Reply

Marsh Posté le 24-06-2003 à 17:27:54    

effectivement:

Code :
  1. int main()
  2. {
  3. int i(27);
  4. return i;
  5. }


 
marche très bien
désolé, c paske g l'habitude du c ... les types de bases sont donc de "vrais" objets
 
merci, pour vos réponses

Reply

Marsh Posté le 24-06-2003 à 17:35:19    

Deaddy a écrit :


qq pourrait-il m'expliquer ce que c'est ? jusqu'à quel point on peut utiliser ce genre de syntax ?


Il y a déjà eu une baston (enfin, je me suis énervé trop vite sur quelqu'un qui savait pas) là dessus :
http://forum.hardware.fr/forum2.ph [...] t=#t272543
 
une initialisation (constructeur():val(intiVal)) c'est lorsque la valeur n'a jamais été affectée, la notion d'ancienne valeur dans la variable n'a pas de sens.
 
Une affectation, qui est plus exactement une affectation (val = newVal) c'est lorsque on écrase l'ancienne valeur pour y mettre une nouvelle, il existe donc des surchages de l'opérateur = (égal) qui vont toucher l'ancienne valeur, par exemple pour la prévenir qu'elle a été virée de la variable. Il est donc hors de question d'avoir un = vers une variable membre dans un constructeur (sauf de la cas rare ou tu sautes d'un constructeur à l'autre et que tu écrase la valeur qu'a mise un precédent constructeur).

Reply

Marsh Posté le 25-06-2003 à 08:43:41    

Deaddy a écrit :

effectivement:
désolé, c paske g l'habitude du c ... les types de bases sont donc de "vrais" objets


 :non: Les type atomique ne sont pas des objets, quand tu fais:

Code :
  1. int i(3);


 
C la même chose que:
 

Code :
  1. int i = 3;


---------------
Le Tyran
Reply

Sujets relatifs:

Leave a Replay

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