====== Méthodes ou fonctions membres ====== Une méthode ou une fonction membre est une fonction C qui possède l'accès à l'ensemble des éléments qui sont définis à l'intérieur de l'objet sans avoir besoin de faire référence à l'instance de l'objet. #include struct Vector { double x; double y; double norm() { return sqrt(x*x + y*y); } } La fonction membre ''norm'' accède directement aux champs ''x'' et ''y'' comme si ces champs étaient des champs définis dans la mémoire globale du programme. Cependant ces champs sont définis dans l'objet. Cette fonction membre ''norm'' peut lire et modifier le contenu des champs ''x'' et ''y''. Le qualificateur [[in204:cpp:syntax:const|const]] permet de définir si une fonction membre a le droit de modifier l'état interne de l'objet, ie. de modifier la valeur d'un champ ou d'appeler une fonction qui modifierait l'état interne de l'objet Une fonction membre est défini comme une fonction standard avec les trois différences suivantes : * elle peut-être précédée du mot-clé ''static'' indiquant qu'il s'agit d'une [[in204:cpp:syntax:class:static|fonction membre statique]], * elle peut-être précédée du mot-clé ''virtual'' indiquant qu'il s'agit d'une [[in204:cpp:syntax:class:virtual|méthode virtuelle]], * elle peut-être suivi du mot clé ''const'' indiquant que la méthode ne peut pas modifier l'état interne de l'objet. Cependant, une fonction membre ne peut pas avoir le même nom que celui de sa classe. En effet, les fonctions membres qui portent le même nom que le nom de la classe sont appelés des [[in204:cpp:syntax:class:constructor|constructeurs]]. ===== Déclaration du prototype et du corps des fonctions membres ===== La définition de la fonction peut contenir * soit l'entête de la fonction membre suivi du corps de cell-ci :\\ #include struct Vector { double x; double y; double norm() { return sqrt(x*x + y*y); } } * soit nous pouvons scinder la déclaration de la fonction membre en définissant au sein de la classe le prototype de la fonction membre. Le code de la fonction membre sera défini en dehors de la classe.\\ #include struct Vector { double x; double y; double norm(); } double Vector::norm() { return sqrt(x*x + y*y); } \ Dans ce cas, il est possible de mettre la définition du code de la fonction dans un fichier ''".h"'' ou ''".hpp"''.\\ // Fichier Vector.hpp #ifndef VectorHPP #define VectorHPP #include struct Vector { double x; double y; double norm(); }; #endif \\ et le code de la fonction membre dans le fichier ''".cc"'' ou ''".cpp"'':\\ // Fichier Vector.cpp #include "Vector.hpp" double Vector::norm() { return sqrt(x*x + y*y); }