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''. |