Software Design

Design de software em C, C++, Java, etc…

C++: Inicialização de membros de classe estáticos

Uma dúvida frequente em C++ é como funciona a inicialização de atributos de classe estáticos. Vamos supor que precisamos criar uma classe que, ao final da execução do programa possa nos dizer quantas vezes ela foi instanciada.

Para isso vamos criar uma classe chamada Testing com um atributo int estático chamado count.

class Testing {
    private:
        static int count;
        string name;

    public:
        Testing() {
            ++count;
        };

        static int getValue() {
            return count;
        };
};

A classe Testing possui um atributo estático ( count ) e um atributo de instância ( name ). O atributo de instância é inicializado automaticamente no construtor, por isso não precisamos fazer nada com ele. Porém o atributo estático requer uma inicialização ( já que ele pode ser utilizado antes de qualquer instância da classe ser construída ). O código para fazer essa inicialização é:

int Testing::count = 0;

Agora o código para testar a classe recém criada ficaria assim:

int Testing::count = 0;

int main(int argc, char** argv) {
    for ( int i = 0 ; i < 10; i++ ) {
        Testing t;
    }
    cout << "final = " << Testing::getValue() << endl;
}

Ao executar este código o resultado será:

final = 10

Ou seja, cada vez que o construtor da classe Testing for invocado, o código ++count será executado.
Essa execução vai incrementar a variável estática. Essa variável pode ser acessada posteriormente em qualquer momento do código, independente de termos uma instância da classe Testing ou não.

Deixe uma resposta

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

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Informação

Publicado às agosto 9, 2012 por em C++ e marcado , , .
%d blogueiros gostam disto: