Uso e inicialização de membros de dados constantes
Já conhecemos o conceito de constante quando aprendemos a linguagem C. A palavra-chave é const A chamada "constante", ou uma variável modificada por "constante" não pode ser alterada. Por exemplo, uma variável modificada com const torna-se uma variável constante. este valor não pode ser alterado.
Bem, em C++ também existe o conceito de constante. A diferença adicional é que além de modificar variáveis gerais em variáveis constantes, const também pode ser usado para modificar um objeto e transformá-lo em um objeto constante. E os membros de dados e funções de membro que podem modificar a classe são chamados de membros de dados constantes e funções de membro constantes da classe, respectivamente.
A seguir, explicaremos membros de dados constantes , funções de membro constante e objetos constantes em sequência.
1. Membros de dados constantes:
O uso de membros de dados constantes é igual ao nosso uso na linguagem C, exceto que esta parte dos dados aparece na classe e o formato usado é o seguinte:
Tipo de dados const nome do membro de dados;
ou
nome do membro de dados do tipo de dados const;
Os membros modificados por const devem ser inicializados e não podem ser alterados, e o método de inicialização é executado na lista de inicialização do construtor da classe.
Além disso, há um caso especial, se o membro for do tipo estático, ou seja, um membro de dados constante estático , por ser um atributo estático, a inicialização precisa ser inicializada fora da classe. Vamos colocar a situação que acabamos de mencionar no código para ilustrar:
#include<iostream>usingnamespacestd;classClock{private:constinth;//Modificar h como um membro de tipo constante constintm;//Modificar m como um membro de tipo constante intconsts;//Ambos os dois usos acima podem ser usados 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;}
Execute os resultados da demonstração:
Preste atenção aos quatro membros de dados constantes da classe. Entre eles, X é um tipo estático. Devido às suas propriedades estáticas especiais, ele precisa ser inicializado fora da classe, mesmo que X seja um tipo privado!
2. Objetos constantes:
Em C++, um objeto pode ser declarado como um tipo const, ou seja, um objeto constante. Após esta declaração, o objeto não pode ser alterado durante todo o ciclo de vida, portanto deve ser inicializado pelo construtor no momento da definição. O formato de definição é o seguinte:
Digite const nome do objeto;
ou
nome do objeto do tipo const;
Deve-se notar que objetos constantes não podem acessar funções não-membros na classe, mas só podem acessar funções-membros constantes (Parte 3 abaixo). Vejamos um exemplo abaixo:
#include<iostream>usingnamespacestd;classClock{private:constinth;//Modifica h para ser um membro de tipo constante constintm;//Modifica m para ser um membro de tipo constante intconsts;//Ambos os dois usos acima são possíveis intx;public: Relógio(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 atenção às instruções nas linhas 39 e 40 do código. A compilação normal reportará um erro porque A é um objeto constante e não pode receber um valor, e a função ShowTime é uma função não membro. As 41 linhas de código podem ser executadas e o efeito é o seguinte:
3. Funções de membros constantes:
Da mesma forma, depois que uma função membro em uma classe é modificada por const, ela se torna uma função membro constante. A definição de uma função membro constante é a seguinte:
Nome da função do tipo de retorno (coluna da lista de parâmetros) const;
Precisa prestar atenção a:
(1) A definição e declaração de funções-membro constantes deve conter const;
(2) As funções-membro constantes só podem chamar funções-membro constantes, mas não podem chamar funções-membro extraordinárias e não podem acessar, mas não podem alterar variáveis-membro extraordinárias.
Por exemplo, o seguinte código:
#include<iostream>usingnamespacestd;classClock{private:constinth;//Modifica h para ser um membro de tipo constante constintm;//Modifica m para ser um membro de tipo constante intconsts;//Ambos os dois usos acima são possíveis intx;public: Relógio(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 atenção às 29ª e 30ª linhas de código. Se você usar a 29ª linha de código, um erro de compilação será relatado.
O estabelecimento do conceito de constantes em C++ esclarece os limites entre mudança e imutabilidade de cada objeto do programa e também aumenta a segurança e controlabilidade dos programas C++.
Por favor, experimente você mesmo.