Elemar DEV

Tecnologia e desenvolvimento .net

C++ 101 – Parte 15 – const

Olá pessoal. Tudo certo?!

Continuamos nossa série introdutória sobre C++. Nesse post, mostro a utilização do modificador const.

Esse operador é extremamente importante pois permite que deixemos claro quando nosso design não prevê que uma variável tenha seu valor alterado.

BTW, estou apresentando código usando gist. Fica mais fácil você dar fork e dar idéias.

O básico

Muitas vezes, desejamos que uma variável não possa ter seu valor original alterado. Ou seja, é uma constante.

Em C++, isso é muito simples. Veja:

No exemplo, percebemos que a não pode ser modificada. A vantagem de utilizar o modificador const é que a verificação ocorre em tempo de compilação (estática).

Importante observar que objetos marcados como const também não podem ter seus atributos modificados.

Esta é uma característica extremamente interessante. Não acha?

Referência interna (this) para objetos constantes

Repare o código que segue:

Ele não compila porque as funções acessam valores através do objeto this que não será compatível com a constante. Veja o erro do compilador:

image

Como resolver isso?! Adicionando “const” antes do corpo do método. Veja:

De forma geral, podemos marcar todos os corpos de método como const quando estes não alteram o estado do objeto. Mais uma vez, podemos pedir ajuda do compilador para evitar enganos.

Fácil, não?!

Immutable Objects

Lembra do readonly do C#?! Usamos o const em C++. Veja:

Entretanto, diferente do C#, temos que modificar a inicialização do objeto também (usando a inicialização indicada na parte 12). Veja:

Pegou a idéia?!

Parâmetros imutáveis

Considere o seguinte código:

Como o objeto que estamos passando como parâmetro é const, devemos explicitar a capacidade de suportar isso na lista de parâmetros do método. Caso contrário, mais uma vez, temos feedback “forte” (em forma de erro) do compilador.

Certo!?

Recomendações gerais

Para concluir, gostaria de deixar algumas recomendações gerais:

  • Marque todas as variáveis (constantes) que não podem ser modificadas como const.
  • Marque todos os corpos de método que não modificam estado da classe como const.
  • Marque todos os parâmetros ponteiro que não devem ser alterados como const.

Era isso.

10 Comentários em “C++ 101 – Parte 15 – const

  1. Show de bola!
    Já deu pra ver que a partir desta série vc vai fazer a de DX! xD

    • Elemar Jr
      03/07/2012

      Exatamente.

      Para falar de tópicos mais avançados em Windows 8, precisaremos ter boa fundamentação em C++.

      Vai ser bacana!

  2. Marcelo
    03/07/2012

    Ola Elemar,

    cara soh nao sei se a melhor “nomenclatura” seria chamar uma constante (const) de variavel.

    Pq, no meu ponto de vista, algo que eh constante nunca pode ser chamado de variavel. Gera uma belissima confusao de termos.

    Grande abraco

    ps.: to com o teclado desconfigurado, por isso nao utilizei nada de acento e pontuacao :-)

  3. lemol
    03/07/2012

    Opa, acho que o último código não aparece (ou só eu não estou vendo). Na parte sobre Parámetros Imutaveis.

    Fora isso, li o post bem rápido e ficou bem claro!

    • elemarjr
      03/07/2012

      para mim está aparecendo. Perceba que mudei o padrão: Não mostro um código com erro, apenas outro funcionando.

    • lemol
      03/07/2012

      Oops, por fim o código apareceu. Acho que o problema era comigo mesmo.

      Abraços!

  4. Oi Elemar,

    Excelente série. Só para informá-lo, os seus gists não aparecem no Google Reader.

    Abraços.

  5. Pingback: C++ 101 – Parte 20 – Conhecendo o (deprecated) ‘auto_ptr’ « Elemar DEV

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

Você está comentando usando sua conta WordPress.com. Sair / Mudar )

Imagem do Twitter

Você está comentando usando sua conta Twitter. Sair / Mudar )

Foto do Facebook

Você está comentando usando sua conta Facebook. Sair / Mudar )

Conectando a %s

Informação

Publicado às 03/07/2012 por em Post e marcado , .

Estatísticas

  • 430,064 hits
%d bloggers like this: