This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
in204:cpp:syntax:class [2019/10/10 09:47] bmonsuez [Accès aux éléments d'un objet] |
in204:cpp:syntax:class [2022/11/18 10:50] (current) |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== La déclaration d'une classe ====== | + | ====== Les classes en C++ ====== |
| + | |||
| + | ===== La déclaration d'une classe ===== | ||
| Une classe définissant un objet est défini comme une [[in204:cpp:syntax:struct|structure]] contenant en plus des champs de la structure des fonctions membres. | Une classe définissant un objet est défini comme une [[in204:cpp:syntax:struct|structure]] contenant en plus des champs de la structure des fonctions membres. | ||
| Line 17: | Line 19: | ||
| - | ====== Les membres d'une classe ===== | + | ===== Les membres d'une classe ===== |
| Les éléments membres d'une classe peuvent être : | Les éléments membres d'une classe peuvent être : | ||
| Line 28: | Line 30: | ||
| * des définitions de fonctions membres et de champs statiques qui sont partagées par tous les objets étant instance de la même classe. | * des définitions de fonctions membres et de champs statiques qui sont partagées par tous les objets étant instance de la même classe. | ||
| - | ====== Accès aux éléments d'un objet ===== | + | ===== Accès aux éléments d'un objet ===== |
| Nous faisons la distinction entre les éléments qui sont propres à un objet instance d'une classe. Ces éléments sont : | Nous faisons la distinction entre les éléments qui sont propres à un objet instance d'une classe. Ces éléments sont : | ||
| Line 46: | Line 48: | ||
| - | ===== Accès aux fonctions membres et aux champs propres à l'objet instance d'une classe ===== | + | ==== Accès aux fonctions membres et aux champs propres à l'objet instance d'une classe ===== |
| Pour pouvoir accéder aux champs et aux fonctions membres d'un objet à l'exception des champs et membres statiques de l'objet, nous utilisons : | Pour pouvoir accéder aux champs et aux fonctions membres d'un objet à l'exception des champs et membres statiques de l'objet, nous utilisons : | ||
| Line 82: | Line 84: | ||
| </code> | </code> | ||
| - | ===== Accès aux autres éléments définis dans la classe ===== | + | ==== Accès aux autres éléments définis dans la classe ===== |
| Pour accéder aux définitions de types présentes dans l'objets, nous référençons ces éléments en préfixant le nom de l'élément référencé par le nom de la classe suivit de ''::''. | Pour accéder aux définitions de types présentes dans l'objets, nous référençons ces éléments en préfixant le nom de l'élément référencé par le nom de la classe suivit de ''::''. | ||
| Line 130: | Line 132: | ||
| - | ===== Sections ''private'', ''protected'' et ''public'' ===== | + | ==== Sections ''private'', ''protected'' et ''public'' ===== |
| - | <code cpp> | ||
| - | class Triple | ||
| - | { | ||
| - | public: | ||
| - | const int | ||
| Les mots clés ''private'', ''protected'' et ''public'' modifient la visibilité des différents éléments dans une classe. Pour plus d'informations, le chapitre détaille les différents niveaux [[in204:cpp:syntax:public|d'accessibilité aux champs et membres]] notamment dans le cadre de l'héritage. | Les mots clés ''private'', ''protected'' et ''public'' modifient la visibilité des différents éléments dans une classe. Pour plus d'informations, le chapitre détaille les différents niveaux [[in204:cpp:syntax:public|d'accessibilité aux champs et membres]] notamment dans le cadre de l'héritage. | ||
| Line 176: | Line 173: | ||
| </code> | </code> | ||
| - | ====== Fonction membres ''const'' & objets modifiables ===== | + | ===== Fonction membres ''const'' & objets modifiables ===== |
| La classe ''Point'' précédemment définie introduit deux fonctions membres qui ne font que lire le contenu des champs ''x'' et ''y'' de l'objet. Ces méthodes ne modifiant par l'objet, il peut-être ajouter le qualificateur [[in204:cpp:syntax:const|''const'']] à ces deux méthodes. | La classe ''Point'' précédemment définie introduit deux fonctions membres qui ne font que lire le contenu des champs ''x'' et ''y'' de l'objet. Ces méthodes ne modifiant par l'objet, il peut-être ajouter le qualificateur [[in204:cpp:syntax:const|''const'']] à ces deux méthodes. | ||
| Line 228: | Line 225: | ||
| </code> | </code> | ||
| + | ===== Le pointeur this ====== | ||
| + | Dans une fonction membre, le mot clé ''this'' désigne le pointeur faisant référence à l'instance de l'objet qui est à l'origine de l'appel de la méthode. | ||
| + | Disposer de la référence sur l'objet dans la méthode est principalement pour les usages suivant : | ||
| + | |||
| + | * lever l'ambiguité sur un conflit entre des noms de fonctions ou de champs, notamment quand il y a une fonction ou un champ qui est défini plusieurs fois dans des contextes différents, cela permet de préciser que l'on souhaite accéder au champ ou à la méthode défini dans la classe en préfixant le nom du membre ou de la méthode par ''this->''.\\ <code cpp> | ||
| + | bool Value::is_equal(const A& anotherValue) const | ||
| + | { | ||
| + | return this->m_value == anotherObject.m_value; | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | * permettre à la fonction de retourner une référence à l'objet, soit sous la forme d'un pointeur, soit au contraire sous la forme d'une référence.\\ <code cpp> | ||
| + | Value& Value::operator+=(const A& anotherValue) | ||
| + | { | ||
| + | this->m_value += anotherValue.m_value; | ||
| + | return *this; | ||
| + | } | ||
| + | </code> | ||
| + | * peremttre de dupliquer l'objet en appelant un constructeur qui attend une référence à l'objet ou de passer la référence de l'objet à une fonction qui attendrait une telle référence.\\ <code cpp> | ||
| + | Value& Value::operator++(int) | ||
| + | { | ||
| + | Value value(*this); | ||
| + | this->m_value ++; | ||
| + | return value; | ||
| + | } | ||
| + | </code> | ||
| - | ====== Différence entre ''class'' et ''struct'' ===== | + | ===== Différence entre ''class'' et ''struct'' ===== |
| En fait, les classes peuvent être définies soit en utilisant le mot-clé ''struct'' soit en utilisant le mot-clé ''class''. Si on utilise le mot clé ''struct'', cela signifie que par défaut les champs et fonctions membres (que l'on appelle aussi méthodes) sont visibles de tous ([[in204:cpp:syntax:public|public]]) tandis qu'ils ne sont visibles que des fonctions membres de la classe si on utilise le mot clé ''class''. | En fait, les classes peuvent être définies soit en utilisant le mot-clé ''struct'' soit en utilisant le mot-clé ''class''. Si on utilise le mot clé ''struct'', cela signifie que par défaut les champs et fonctions membres (que l'on appelle aussi méthodes) sont visibles de tous ([[in204:cpp:syntax:public|public]]) tandis qu'ils ne sont visibles que des fonctions membres de la classe si on utilise le mot clé ''class''. | ||