Ofereço ajuda em Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD
+55 (062) 98553-6711
Ofereço ajuda em PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO
+55 (062) 98243-1195

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;

Link para compartilhar na Internet ou com seus amigos:

Desafios, Exercícios e Algoritmos Resolvidos de C++

Veja mais Dicas e truques de C++

Dicas e truques de outras linguagens

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 26 usuários muito felizes estudando em nosso site.