Utilisation et initialisation de membres de données constants
Nous connaissons déjà le concept de constante lorsque nous apprenons le langage C. Le mot-clé est const . La soi-disant "constante", ou une variable modifiée par "constant", ne peut pas être modifiée. Par exemple, une variable modifiée avec const devient une variable constante. cette valeur ne peut pas être modifiée.
Eh bien, en C++, il existe également le concept de constante. La différence supplémentaire est qu'en plus de modifier des variables générales en variables constantes, const peut également être utilisé pour modifier un objet et le transformer en objet constant. Et les données membres et les fonctions membres qui peuvent modifier la classe sont respectivement appelées données membres constantes et fonctions membres constantes de la classe.
Ensuite, nous expliquerons les membres de données constantes , les fonctions membres constantes et les objets constants dans l'ordre.
1. Membres de données constantes :
L'utilisation des données membres constantes est la même que notre utilisation en langage C, sauf que cette partie des données apparaît dans la classe, et le format utilisé est le suivant :
Type de données const nom du membre de données ;
ou
const type de données nom du membre de données ;
Les membres modifiés par const doivent être initialisés et ne peuvent pas être modifiés, et la méthode d'initialisation est effectuée dans la liste d'initialisation du constructeur de la classe.
De plus, il existe un cas particulier, si le membre est un type statique, c'est-à-dire un membre de données constant statique , car il s'agit d'un attribut statique, l'initialisation doit être initialisée en dehors de la classe. Mettons la situation que nous venons de mentionner dans le code pour illustrer :
#include<iostream>usingnamespacestd;classClock{private:constinth;//Modifier h en tant que membre de type constant constintm;//Modifier m en tant que membre de type constant intconsts;//Les deux utilisations ci-dessus peuvent être utilisées staticconstintx;public:Clock (inta, intb,intc):h(a),m(b),s(c){cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<:<<m<< :<< s<<endl;return0;}intGetX(){cout<<x<<endl;return0;}};constintClock::x=99;intmain(){ClockA(12,10,30);A. ShowTime() ;A.GetX();return0;}
Exécutez les résultats de la démonstration :
Veuillez faire attention aux quatre membres de données constants de la classe. Parmi eux, X est un type statique. En raison de ses propriétés statiques spéciales, il doit être initialisé en dehors de la classe, même si X est un type privé !
2. Objets constants :
En C++, un objet peut être déclaré comme un type const, c'est-à-dire un objet constant. Après cette déclaration, l'objet ne peut plus être modifié pendant tout le cycle de vie, il doit donc être initialisé par le constructeur lors de la définition. Le format de définition est le suivant :
Tapez le nom de l'objet const ;
ou
nom de l'objet de type const ;
Il convient de noter que les objets constants ne peuvent pas accéder aux fonctions non membres de la classe, mais ne peuvent accéder qu'aux fonctions membres constantes (partie 3 ci-dessous). Regardons un exemple ci-dessous :
#include<iostream>usingnamespacestd;classClock{private:constinth;//Modifier h pour être un membre de type constant constintm;//Modifier m pour être un membre de type constant intconsts;//Les deux utilisations ci-dessus sont possibles intx;public : Clock(inta, intb,intc):h(a),m(b),s(c){x=99;cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<< : <<m< <:<<s<<endl;return0;}intGetX()const{//x=99;cout<<x<<endl;return0;}};intmain(){constClockA(12,10, 30);constClockB (14,20,50);//A=B;//A.ShowTime();A.GetX();return0;}
Faites attention aux instructions des lignes 39 et 40 du code. La compilation normale signalera une erreur car A est un objet constant et ne peut pas se voir attribuer de valeur, et la fonction ShowTime est une fonction non membre. Les 41 lignes de code peuvent être exécutées, et l'effet est le suivant :
3. Fonctions membres constantes :
De même, une fois qu'une fonction membre d'une classe est modifiée par const, elle devient une fonction membre constante. La définition d'une fonction membre constante est la suivante :
Nom de la fonction de type renvoyé (colonne de la liste de paramètres) const ;
Il faut faire attention à :
(1) La définition et la déclaration des fonctions membres constantes doivent contenir const ;
(2) Les fonctions membres constantes ne peuvent appeler que des fonctions membres constantes, mais ne peuvent pas appeler de fonctions membres extraordinaires, et ne peuvent pas accéder mais ne peuvent pas modifier les variables membres extraordinaires.
Par exemple, le code suivant :
#include<iostream>usingnamespacestd;classClock{private:constinth;//Modifier h pour être un membre de type constant constintm;//Modifier m pour être un membre de type constant intconsts;//Les deux utilisations ci-dessus sont possibles intx;public : Clock(inta, intb,intc):h(a),m(b),s(c){x=99;cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<< : <<m< <:<<s<<endl;return0;}intGetX()const{//x=99;cout<<x<<endl;return0;}};intmain(){constClockA(12,10, 30);A .GetX();return0;}
Faites attention aux 29e et 30e lignes de code. Si vous utilisez la 29e ligne de code, une erreur de compilation sera signalée. L'effet d'exécution réel est le suivant :
L'établissement du concept de constantes en C++ clarifie les limites entre le changement et l'immuabilité de chaque objet du programme, et améliore également la sécurité et la contrôlabilité des programmes C++.
Veuillez l'essayer par vous-même.