User Tools

Site Tools


cpp:syntax:struct

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
cpp:syntax:struct [2019/09/16 11:46]
127.0.0.1 external edit
cpp:syntax:struct [2022/11/18 10:47] (current)
Line 38: Line 38:
 ==== L'​initialisation des structures en C++ ==== ==== L'​initialisation des structures en C++ ====
  
-Pour initialiser les structures en C++, il suffit de fournir la liste des valeurs dans l'​ordre dans lequel les champs sont définis. Ainsi écrire :+Pour initialiser les structures en C++, il suffit de fournir ​comme en C 99, la liste des valeurs dans l'​ordre dans lequel les champs sont définis. Ainsi écrire :
  
 <code cpp> <code cpp>
Line 47: Line 47:
  
 correspond à initialiser les champs ''​x''​ et ''​y''​ de la structure ''​point''​ avec les valeurs ''​1''​ et ''​3''​. correspond à initialiser les champs ''​x''​ et ''​y''​ de la structure ''​point''​ avec les valeurs ''​1''​ et ''​3''​.
 +
 +Attention, cependant, ceci n'est pas toujours vrai. En effet, s'il existe un constructeur qui prend la liste des éléments en arguments, alors, c'est ce constructeur qui sera appelé. Considérons le code suivant :
 +
 +<code cpp>
 +struct rational
 +{
 +    int numerator;
 +    int denominator;​
 +    ​
 +    rational(): numerator(0),​ denominator(0) {}
 +    rational(int theNumerator):​ numerator(theNumerator),​ denominator(0) {}
 +    rational(int theNumerator,​ int theDenominator)
 +    {
 +        if(theDenominator == 0)
 +            throw std::​invalid_argument("​theDenominator"​);​
 +        if(theDenominator < 0)
 +        {
 +            theNumerator *= -1;
 +            theDenominator *= -1;
 +        }
 +        numerator = theNumerator;​
 +        denominator = theDenominator;​
 +    }
 +};
 +</​code>​
 + 
 +Ecrire l'​affectation suivante:
 +<code cpp>
 +    rational r = { 1, 0};   
 +</​code>​
 +
 +ne va pas correspondre à :
 +<code cpp>
 +    rational r;
 +    r.numerator = 1;   
 +    r.denominator = 0;   
 +</​code>​
 +
 +mais à l'​appel du constructeur suivant :
 +<code cpp>
 +    rational r(1, 2);
 +</​code>​
 +
 +Et donc, une [[cpp:​syntax:​exception|exception]] de type [[https://​en.cppreference.com/​w/​cpp/​error/​invalid_argument|std::​invalid_argument]] sera générée.
  
  
  
cpp/syntax/struct.1568634414.txt.gz · Last modified: 2019/09/16 11:46 by 127.0.0.1