Fonction membre const en C++

Muhammad Husnain 12 octobre 2023
Fonction membre const en C++

Cet article concerne l’utilisation des fonctions membres constantes en C++. Nous utilisons le mot-clé const pour rendre constant n’importe quel objet, variable ou fonction.

Comme toute autre variable ou objet, les fonctions membres d’une classe peuvent également être rendues const. Certaines règles et réglementations pour ces fonctions seront discutées dans cet article.

Fonction membre Const en C++

Const est un qualificatif de type, un mot-clé utilisé avec un type de données indiquant que les données sont en lecture seule. Bien qu’il puisse être utilisé pour déclarer des constantes, Const diffère des constructions comparables dans d’autres langages en ce qu’il fait partie du type et a donc un comportement compliqué lorsqu’il est associé à des pointeurs, des références, des types de données composites et la vérification de type.

Les fonctions membres Const sont déclarées comme des constantes dans le programme. L’objet référencé par ces fonctions ne peut pas être modifié.

Il est conseillé d’utiliser le mot-clé const pour éviter des modifications involontaires de l’objet. Tout objet peut appeler une fonction membre const.

Seuls les objets non-const peuvent appeler des fonctions non-const. Si on déclare l’objet d’une classe comme un objet const, il ne peut appeler que des fonctions membres const, alors qu’un objet non-const peut appeler toutes les fonctions membres const ou non-const.

La syntaxe pour faire une fonction const est :

return -datatype function_name() const;

Prenons l’exemple ci-dessous.

#include <iostream>
using namespace std;
class Data {
  int val;

 public:
  Data(int a = 0) { val = a; }
  int getValue() const { return val; }
};
int main() {
  Data d(10);
  cout << d.getValue();
  return 0;
}

Nous avons déclaré une classe Data avec un constructeur et une fonction membre getValue() dans ce segment de code. Cette fonction est une fonction const afin qu’elle ne puisse pas modifier la valeur de la donnée membre.

S’il modifie les données de n’importe quel membre de données, le compilateur générera une erreur. Le pointeur this dans cette fonction est un pointeur vers un objet const fourni à une fonction membre const.

Cela garantit que le pointeur ne peut pas être utilisé pour modifier les membres de données de l’objet. Toute tentative de modification d’une donnée membre d’un objet appelé méthode constante et toute tentative d’appel d’une fonction membre non-const pour cet objet entraînera une erreur de syntaxe.

Une fonction membre constante peut avoir une version non constante surchargée. Le compilateur détermine la version à utiliser selon qu’il est appelé par un objet const ou un objet non-const.

Les constructeurs et destructeurs Const ne peuvent jamais être déclarés. Ils peuvent toujours modifier une donnée membre, même si l’objet lui-même est constant.

Les fonctions membres statiques ne peuvent pas être définies comme étant const. Le mot-clé const affecte la référence de pointeur this fournie à une fonction membre, mais les fonctions membres statiques n’en ont pas car elles peuvent être appelées sans objet.

Il est également possible d’assouplir la limitation de la fonction const qui empêche la fonction d’écrire dans n’importe quelle variable de classe. Ces variables de classe sont marquées avec le mot-clé mutable pour leur permettre d’être accessibles en écriture même lorsque la fonction est marquée comme une fonction const.

Si une variable de classe est marquée comme mutable et qu’une fonction const y écrit, le code se compilera correctement et la variable pourra être modifiée (C++11).

La modification de l’emplacement du mot clé const dans une instruction C++ a une sémantique complètement distincte, comme c’est généralement le cas lorsque vous travaillez avec le mot clé const. L’utilisation précédente de const ne s’applique que lorsque const est placé à la fin de la déclaration de la fonction après les parenthèses.

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn