This shows you the differences between two versions of the page.
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. | ||