Dans ce module, on va surtout passer du temps à comprendre ce qu’est un entier, un flottant, un nombre en virgule fixe/flottante, etc. Il y a également une nouvelle consigne à prendre en compte pour la suite des modules : nos classes devront se conformer à la forme canonique de Coplien. Nous allons commencer par comprendre ce qu’est la surcharge de fonctions (ou Polymorphisme ad-hoc).
void foo(int a) {
cout << "int" << endl;
}
void foo(float a) {
cout << "float" << endl;
}
void foo(double a) {
cout << "double" << endl;
}
À partir de maintenant, vos classes devront impérativement se conformer à la forme canonique de Coplien, sauf en cas d’indication contraire. Cela signifie qu’elles devront comporter les quatre fonctions membres suivantes :
#ifndef SAMPLE_HPP
# define SAMPLE_HPP
#include <iostream>
class Sample {
public:
Sample(void); // ✅ Constructeur par défaut
Sample(const int n); // 🆗 Bonne pratique ce constructeur
Sample(const Sample &rhs); // ✅ Constructeur de recopie
Sample & operator=(const Sample &rhs); // ✅ Opérateur d’affectation
~Sample(void); // ✅ Destructeur
const int getFoo(void);// 🆗 Bonne pratique cet accesseur
private:
int foo_;// 🆗 Bonne pratique le _
};
// 🆗 Bonne pratique
std::operator &operator<<(std::ostream &o, const Sample &i);
#endif
Sample::Sample(const Sample &rhs) {
std::cout << "Copy constructor called" << std::endl;
*this = rhs;
return ;
}
Sample &Sample::operator=(const Sample &rhs) {
std::cout << "Assignation operator called" << std::endl;
this->foo_ = rhs.getFoo();
return (*this);
}
std::operator &operator<<(std::ostream &o, const Sample &i) {
o << i.getFoo();
return (o);
}
42 est un nombre écrit en base 10 (dite décimale). J’ai pioché dans une liste de chiffre allant de 0 à 9.
Le premier nombre que je peux écrire en utilisant les chiffres de ma base décimale, c’est : 0.
Le deuxième est 1, puis 2, jusqu'à 9 pour ensuite passer à 10.
Il faut imaginer que les chiffres du nombre 10 sont mis dans des cases : [1][0].
Si je veux augmenter ce nombre, je vais à la case la plus à droite et je lui donne le chiffre suivant dans ma liste {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}.
[1][0] -> [1][1] -> [1][2] -> [1][3] -> [1][4] -> ... -> [1][9] -> ?