Uso e inicialización de miembros de datos constantes.
Ya conocemos el concepto de constante cuando aprendemos el lenguaje C. La palabra clave es const . La llamada "constante", o una variable modificada por "constante" no se puede cambiar. Por ejemplo, una variable modificada con const se convierte en variable constante. este valor no se puede cambiar.
Bueno, en C++ también existe el concepto de constante. La diferencia adicional es que además de modificar variables generales en variables constantes, const también se puede usar para modificar un objeto y convertirlo en un objeto constante. Y los miembros de datos y funciones miembro que pueden modificar la clase se denominan miembros de datos constantes y funciones miembro constantes de la clase, respectivamente.
A continuación, explicaremos miembros de datos constantes , funciones miembro constantes y objetos constantes en secuencia.
1. Miembros de datos constantes:
El uso de miembros de datos constantes es el mismo que nuestro uso en lenguaje C, excepto que esta parte de los datos aparece en la clase y el formato utilizado es el siguiente:
Tipo de datos nombre del miembro de datos constantes;
o
nombre del miembro de datos del tipo de datos constante;
Los miembros modificados por const deben inicializarse y no pueden cambiarse, y el método de inicialización se realiza en la lista de inicialización del constructor de la clase.
Además, existe un caso especial: si el miembro es de tipo estático, es decir, un miembro de datos constantes estáticos , debido a que es un atributo estático, la inicialización debe inicializarse fuera de la clase. Pongamos la situación que acabamos de mencionar en el código para ilustrar:
#include<iostream>usingnamespacestd;classClock{private:constinth;//Modificar h como miembro de tipo constante constintm;//Modificar m como miembro de tipo constante intconsts;//Se pueden usar ambos usos anteriores 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;}
Ejecute los resultados de la demostración:
Preste atención a los cuatro miembros de datos constantes de la clase. Entre ellos, X es un tipo estático. Debido a sus propiedades estáticas especiales, debe inicializarse fuera de la clase, ¡incluso si X es un tipo privado!
2. Objetos constantes:
En C++, un objeto se puede declarar como de tipo constante, es decir, un objeto constante. Después de esta declaración, el objeto no se puede cambiar durante todo el ciclo de vida, por lo que el constructor debe inicializarlo al definir. El formato de definición es el siguiente:
Escriba el nombre del objeto constante;
o
nombre de objeto de tipo constante;
Cabe señalar que los objetos constantes no pueden acceder a funciones que no sean miembros de la clase, pero solo pueden acceder a funciones miembro constantes (Parte 3 a continuación). Veamos un ejemplo a continuación:
#include<iostream>usingnamespacestd;classClock{private:constinth;//Modificar h para que sea un miembro de tipo constante constintm;//Modificar m para que sea un miembro de tipo constante intconsts;//Ambos usos anteriores son posibles intx;public: Reloj(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;}
Preste atención a las declaraciones en las líneas 39 y 40 del código. La compilación normal informará un error porque A es un objeto constante y no se le puede asignar un valor, y la función ShowTime es una función no miembro. Se pueden ejecutar las 41 líneas de código y el efecto es el siguiente:
3. Funciones de miembros constantes:
De manera similar, después de que una función miembro en una clase es modificada por const, se convierte en una función miembro constante. La definición de una función miembro constante es la siguiente:
Nombre de función de tipo de retorno (columna de lista de parámetros) const;
Necesito prestar atención a:
(1) La definición y declaración de funciones miembro constantes debe contener const;
(2) Las funciones miembro constantes solo pueden llamar a funciones miembro constantes, pero no pueden llamar a funciones miembro extraordinarias, y no pueden acceder a variables miembro extraordinarias, pero no pueden cambiarlas.
Por ejemplo, el siguiente código:
#include<iostream>usingnamespacestd;classClock{private:constinth;//Modificar h para que sea un miembro de tipo constante constintm;//Modificar m para que sea un miembro de tipo constante intconsts;//Ambos usos anteriores son posibles intx;public: Reloj(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;}
Preste atención a las líneas de código 29 y 30. Si utiliza la línea 29 de código, se informará un error de compilación. El efecto de ejecución real es el siguiente:
El establecimiento del concepto de constantes en C++ aclara los límites entre el cambio y la inmutabilidad de cada objeto en el programa y también mejora la seguridad y controlabilidad de los programas C++.
Pruébelo usted mismo.