Você está aqui: C++ ::: Dicas & Truques ::: Programação Orientada a Objetos |
Definindo e usando variáveis estáticas em suas classes C++Quantidade de visualizações: 10782 vezes |
Variáveis estáticas podem ser definidas em C++ por meio do uso da palavra-chave static. Uma variável estática pertence à classe na qual ela é definida e não à cada uma de suas instâncias. Pareceu confuso? Você pode pensar assim: quando definida com o modificador static, uma variável será única na classe, não importa a quantidade de instâncias da classe que serão criadas. Cada uma destas instâncias compartilhará o valor da variável estática. Além disso, uma variável estática pode ser acessada por meio do nome da classe, sem a necessidade de uma referência a uma de suas instâncias. Uma variável estática pode ser public, private ou protected. Vamos ver um exemplo? Considere a situação na qual gostaríamos de criar um identificador único para cada um dos objetos de uma classe. Vamos começar com o arquivo de definição da classe Livro: Código para Livro.h // vamos evitar múltiplas inclusões do // arquivo de cabeçalho (header file) #ifndef LIVRO_H #define LIVRO_H // vamos incluir o header string #include <string> using namespace std; class Livro{ public: // construtor da classe Livro Livro(); // método que permite retornar o título do livro string getTitulo(); // método que permite definir o título do livro void setTitulo(string); // método que permite retornar o identificador do livro int getId(); private: // variáveis privadas string titulo; // variável estática que permitirá definir um // identificador único para cada livro static int id; }; #endif Aqui a variável estática id é declarada como private. Como nossa intenção é usá-la como identificador único de instâncias, obtemos seu valor por meio do método público getId(). Veja agora o arquivo de implementação para esta classe: Código para Livro.cpp: // arquivo de implementação para a // classe Livro // vamos incluir o header Livro.h #include "Livro.h" // vamos declarar e inicializar a variável estática int Livro::id = 0; // implementação do construtor Livro::Livro(){ // vamos incrementar a variável estática Livro::id++; } // método que permite obter o título do livro string Livro::getTitulo(){ return this->titulo; } // método que permite definir o título do livro void Livro::setTitulo(string titulo){ this->titulo = titulo; } // método que permite obter o título do livro int Livro::getId(){ return Livro::id; } O primeiro detalhe a observar no código de implementação da classe Livro é a linha: int Livro::id = 0; O compilador C++ nos força a fazer esta declaração e inicialização de variáveis estáticas. Note o uso do nome da classe seguida por um par de dois pontos (::). Para finalizar, veja como criar três objetos da classe Livro a partir da função main() da aplicação: Código para main.cpp: #include <cstdlib> #include <iostream> // vamos incluir a classe Livro #include "Livro.h" using namespace std; int main(int argc, char *argv[]) { // vamos criar um objeto da classe Livro Livro *a = new Livro(); a->setTitulo("Programando em Java 2"); // vamos exibir os dados do livro cout << "Id: " << a->getId() << endl; cout << "Titulo: " << a->getTitulo() << endl; // vamos criar mais um livro Livro *b = new Livro(); b->setTitulo("A biblia do C/C++"); // vamos exibir os dados do livro cout << "Id: " << b->getId() << endl; cout << "Titulo: " << b->getTitulo() << endl; // e mais um livro aqui Livro *c = new Livro(); c->setTitulo("PHP + MySQL"); // vamos exibir os dados do livro cout << "Id: " << c->getId() << endl; cout << "Titulo: " << c->getTitulo() << endl; system("PAUSE"); return EXIT_SUCCESS; } Ao executar esta aplicação teremos o seguinte resultado: Id: 1 Titulo: Programando em Java 2 Id: 2 Titulo: A biblia do C/C++ Id: 3 Titulo: PHP + MySQL Como podemos ver, a cada instância criada a variável id é incrementada em 1. Caso você não tenha entendido todo o processo, este incremento acontece no construtor da classe Livro. Veja: // vamos incrementar a variável estática Livro::id++; Nas situações em que as variáveis estáticas são públicas, podemos acessá-la usando o nome da classe e um par de dois pontos (::). Assim, se a variável id fosse pública, poderíamos acessá-la de qualquer lugar de nossa aplicação da seguinte forma: cout << Livro::id << endl; |
![]() |
Desafios, Exercícios e Algoritmos Resolvidos de C++ |
Veja mais Dicas e truques de C++ |
Dicas e truques de outras linguagens |
Java - Como usar o método next() da interface Iterator do Java para obter o próximo elemento da iteração |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |