Junior
O que você sabe sobre métodos constantes e não constantes?
sobes.tech IA
Resposta da IA
Os métodos constantes (const methods) em C++ são métodos de classe que são declarados com a palavra-chave const após a lista de parâmetros.
class MyClass {
public:
void nonConstMethod(); // Método não constante
void constMethod() const; // Método constante
};
A palavra-chave const após a lista de parâmetros garante que o método não irá alterar o estado do objeto para o qual é chamado. Isto significa que dentro de um método constante:
- Não se podem modificar os membros de dados não estáticos do objeto.
- Apenas podem ser chamados outros métodos constantes do mesmo objeto.
Propósito dos métodos constantes:
- Segurança: Impedem alterações acidentais no estado do objeto.
- Uso com objetos constantes: Objetos constantes (declarados com
const) só podem chamar métodos constantes. Métodos não constantes não estão acessíveis para eles. - Sobrecarga: Os métodos podem ser sobrecarregados por constância. Isto permite ter dois métodos com o mesmo nome e assinatura de parâmetros, mas um será constante e o outro não. O compilador escolherá a versão adequada dependendo de se o método é chamado em um objeto constante ou não.
class MyClass {
int value;
public:
int getValue() const { // Versão constante
return value;
}
int getValue() { // Versão não constante
return value++; // Possibilidade de modificar o estado
}
};
void test(const MyClass& objConst, MyClass& objNonConst) {
objConst.getValue(); // Chama a versão const
objNonConst.getValue(); // Chama a versão não const
}
Métodos não constantes:
São métodos normais de classe que podem modificar o estado do objeto. São declarados sem a palavra-chave const após a lista de parâmetros.
Utilização:
| Tipo de objeto | Chamada do método | Qual método será chamado | Explicação |
|---|---|---|---|
const T |
obj.method() |
Apenas o método constante | Não é possível modificar o estado do objeto constante. |
T |
obj.method() |
Método não constante (se existir) | Métodos não constantes podem modificar o estado. |
T |
obj.method() const |
Método constante (se existir) | Se ambas as versões existirem e a chamada for feita em um objeto não constante, a prioridade é a versão não constante. Mas é possível fazer um cast explícito ao objeto, se desejar chamar a versão constante (pouco comum). |
O uso da constância é uma boa prática, pois melhora a legibilidade e segurança do código, além de permitir ao compilador realizar otimizações adicionais.