Les fonctions membres constantes sont les fonctions qui se voient refuser l'autorisation de modifier les valeurs des données membres de leur classe. Pour rendre une fonction membre constante, le mot-clé const est ajouté au prototype de fonction ainsi qu'à l'en-tête de définition de fonction.
Comme les fonctions membres et les arguments des fonctions membres, les objets d'une classe peuvent également être déclarés comme const. Un objet déclaré comme const ne peut pas être modifié et ne peut donc invoquer que les fonctions membres const car ces fonctions garantissent de ne pas modifier l'objet. Un objet const peut être créé en préfixant le mot-clé const à la déclaration d'objet. Toute tentative de modification des données membres des objets const entraîne une erreur de compilation.
Syntaxe
La fonction membre const peut être définie de trois manières :
1. Pour la déclaration de fonction dans une classe.
return_type function_name () const ;>
Exemple:
int get_data() const;>
2. Pour la définition de fonction dans la déclaration de classe.
return_type function_name () const { //function body }> Exemple:
formater la date en chaîne
int get_data() const { //function body }> 3. Pour la définition de fonctions en dehors de la classe.
return_type class_name::function_name () const { //function body }> Exemple:
int Demo :: get_data() const { }> Les points importants
- Lorsqu'une fonction est déclarée comme const, elle peut être appelée sur n'importe quel type d'objet, objet const ainsi que des objets non const.
- Chaque fois qu'un objet est déclaré comme const, il doit être initialisé au moment de la déclaration. cependant, l'initialisation de l'objet lors de la déclaration n'est possible qu'à l'aide de constructeurs.
- Une fonction devient const lorsque le mot-clé const est utilisé dans la déclaration de la fonction. L'idée des fonctions const n'est pas de leur permettre de modifier l'objet sur lequel elles sont appelées.
- Il est recommandé de créer autant de fonctions const que possible afin d'éviter les modifications accidentelles des objets.
Exemples de fonctions membres Const
Exemple 1
Le programme C++ ci-dessous démontre que les données membres peuvent être mises à jour dans une fonction membre qui n'est pas constante.
C++
// C++ program to demonstrate that data members can be> // updated in a member function that is not constant.> #include> using> namespace> std;> class> Demo {> >int> x;> public>:> >void> set_data(>int> a) { x = a; }> >// non const member function> >// data can be updated> >int> get_data()> >{> >++x;> >return> x;> >}> };> main()> {> >Demo d;> >d.set_data(10);> >cout << d.get_data();> >return> 0;> }> |
>
>Sortir
11>
Exemple 2
Le programme C++ ci-dessous démontre que les données ne peuvent pas être mises à jour dans une fonction membre Constant.
C++
// C++ program to demonstrate that data cannot be updated> // in a Constant member function> #include> using> namespace> std;> class> Demo {> >int> x;> public>:> >void> set_data(>int> a) { x = a; }> >// constant member function> >int> get_data()>const> >{> >// Error while attempting to modify the data> >// member> >++x;> >return> x;> >}> };> main()> {> >Demo d;> >d.set_data(10);> >cout << endl << d.get_data();> >return> 0;> }> |
>
>
Sortir
./Solution.cpp: In member function 'int Demo::get_data() const': ./Solution.cpp:17:11: error: increment of member 'Demo::x' in read-only object ++x; ^>
Exemple 3
Le code C++ ci-dessous montre comment définir des fonctions membres constantes en dehors de la définition de classe et présente l'utilisation d'une fonction membre constante pour définir et récupérer la valeur d'une variable membre privée.
C++
// Constant member function defined outside the class> #include> using> namespace> std;> class> Demo {> >int> x;> public>:> >void> set_data(>int>);> >// const member function> >int> get_data()>const>;> };> // Function definition for setting the value of x.> void> Demo::set_data(>int> a) { x = a; }> // Function definition for retrieving the value of x (const> // member function).> int> Demo::get_data()>const> {>return> x; }> main()> {> >Demo d;> >// Set the value of x to 10 using the non-const member> >// function.> >d.set_data(10);> >// Print the value of x using the const member function.> >cout << d.get_data();> >return> 0;> }> |
>
>Sortir
10>
Exemple 4
Le programme C++ ci-dessous démontre que les fonctions const peuvent être appelées par des objets non const.
C++
convertir une chaîne en json java
// C++ program to demonstrate that const functions can be> // called by non const objects> #include> using> namespace> std;> class> Test {> >int> value;> public>:> >Test(>int> v = 0) { value = v; }> >// const member function> >int> getValue()>const> {>return> value; }> };> int> main()> {> >// non const object> >Test t(20);> >cout << t.getValue();> >return> 0;> }> |
>
>Sortir
20>
Lorsqu'une fonction est déclarée comme const, elle peut être appelée sur n'importe quel type d'objet. Les fonctions non const ne peuvent être appelées que par des objets non const.
Par exemple, le programme suivant comporte des erreurs de compilation.
C++
qu'est-ce que f5 sur le clavier
// C++ program that demonstrate that non-const functions can> // not be called by const objects> #include> using> namespace> std;> class> Test {> >int> value;> public>:> >Test(>int> v = 0) { value = v; }> >// non const member function> >int> getValue() {>return> value; }> };> int> main()> {> >// const object> >const> Test t;> >cout << t.getValue();> >return> 0;> }> |
>
>
Sortir
./d869c7ba-f199-4a67-9449-3936b5db4c5b.cpp: In function 'int main()': ./d869c7ba-f199-4a67-9449-3936b5db4c5b.cpp:14:24: error: passing 'const Test' as 'this' argument of 'int Test::getValue()' discards qualifiers [-fpermissive] cout << t.getValue();>
Regardons un autre exemple :
C++
// Demonstration of constant object,> // show that constant object can only> // call const member function> #include> using> namespace> std;> class> Demo {> >int> value;> public>:> >Demo(>int> v = 0) { value = v; }> >void> showMessage()> >{> >cout <<>'Hello World We are Tushar, '> >'Ramswarup, Nilesh and Subhash Inside'> >' showMessage() Function'> ><< endl;> >}> >// const member function> >void> display()>const> >{> >cout <<>'Hello world I'm Rancho '> >'Baba Inside display() Function'> ><< endl;> >}> };> int> main()> {> >// Constant object are initialised at the time of> >// declaration using constructor> >const> Demo d1;> >// d1.showMessage();Error occurred if uncomment.> >d1.display();> >return> (0);> }> |
>
>Sortir
Hello world I'm Rancho Baba Inside display() Function>
FAQ sur les fonctions membres Const
T1. Les objets const d'une classe peuvent-ils appeler des fonctions non membres const ?
Répondre:
Non, un objet déclaré comme const ne peut pas être modifié et ne peut donc invoquer que les fonctions membres const car ces fonctions garantissent de ne pas modifier l'objet.
Q2. Les objets non const d'une classe peuvent-ils appeler une fonction membre const ?
Répondre:
Lorsqu'une fonction est déclarée comme const, elle peut être appelée sur n'importe quel type d'objet.