This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
in204:tds:sujets:td5:part2 [2020/10/14 06:47] bmonsuez [Question n°1.2] |
in204:tds:sujets:td5:part2 [2022/11/18 10:48] (current) |
||
---|---|---|---|
Line 24: | Line 24: | ||
L'opérateur prend comme premier argument un flux en lecture [[https://en.cppreference.com/w/cpp/io/basic_istream|''std::basic_istream<charT, charTraits>&'']] et comme second argument un nombre ''Complex''. Comme le nombre va pas être modifié, il est nécessaire de passer une référence à l'objet qui va recevoir la valeur lue du flux, d'où la signature précédente. Comme nous souhaitons associer les opérations d'écriture sur le flux, l'opérateur ''>>'' retourne une référence sur le flux duquel nous venons de lire la donnée. | L'opérateur prend comme premier argument un flux en lecture [[https://en.cppreference.com/w/cpp/io/basic_istream|''std::basic_istream<charT, charTraits>&'']] et comme second argument un nombre ''Complex''. Comme le nombre va pas être modifié, il est nécessaire de passer une référence à l'objet qui va recevoir la valeur lue du flux, d'où la signature précédente. Comme nous souhaitons associer les opérations d'écriture sur le flux, l'opérateur ''>>'' retourne une référence sur le flux duquel nous venons de lire la donnée. | ||
- | |||
- | |||
- | |||
- | |||
- | |||
==== Question n°1.1 ==== | ==== Question n°1.1 ==== | ||
Line 42: | Line 37: | ||
<hidden Correction> | <hidden Correction> | ||
- | <nodisp 2> | ||
L'opérateur ''std::basic_ostream<charT, traits>& operator << (std::basic_ostream<charT, traits>&, const Complex&)'' doit être défini en dehors de la classe ''Complex'' puisqu'il prend comme premier argument un argument de type différent de ''Complex''. Cependant, cet opérateur doit pouvoir accéder aux champs internes de la classe. | L'opérateur ''std::basic_ostream<charT, traits>& operator << (std::basic_ostream<charT, traits>&, const Complex&)'' doit être défini en dehors de la classe ''Complex'' puisqu'il prend comme premier argument un argument de type différent de ''Complex''. Cependant, cet opérateur doit pouvoir accéder aux champs internes de la classe. | ||
Line 96: | Line 90: | ||
</code> | </code> | ||
- | </nodisp> | + | Il serait cependant préférable de pouvoir effectuer un affichage minimaliste des nombres complexes. Ainsi, nous nous contentons d'afficher la partie réelle si la partie imaginaire et nulle ou la seule partie imaginaire si la partie réelle est nulle. Cet affichage plus proche de l'affiche courant peut être fourni pas le code suivant : |
+ | |||
+ | <code cpp> | ||
+ | template<class charT, class charTraits> | ||
+ | std::basic_ostream<charT>& operator <<( | ||
+ | std::basic_ostream<charT, charTraits>& aStream, | ||
+ | const Complex& aValue) | ||
+ | { | ||
+ | if(aValue.mRealPart != 0 && | ||
+ | aValue.mImaginaryPart != 0) | ||
+ | aStream << aValue.mRealPart << "+" << aValue.mImaginaryPart << "i"; | ||
+ | else if(aValue.mImaginaryPart != 0) | ||
+ | aStream << aValue.mImaginaryPart << "i"; | ||
+ | else | ||
+ | aStream << aValue.mRealPart; | ||
+ | } | ||
+ | </code> | ||
</hidden> | </hidden> | ||
Line 110: | Line 120: | ||
x | x | ||
</code> | </code> | ||
+ | |||
Définissez une opération de lecture d’un flux effectuant cette lecture d’un objet de type ''Complex''. | Définissez une opération de lecture d’un flux effectuant cette lecture d’un objet de type ''Complex''. | ||
Line 139: | Line 150: | ||
---- | ---- | ||
+ | |||
+ | <hidden Correction> | ||
+ | |||
+ | Nous començons à nous intéresser à l'affichage selon le format: | ||
+ | |||
+ | </hidden> | ||
==== Question n°1.3 (En dehors du cours !) ==== | ==== Question n°1.3 (En dehors du cours !) ==== |