Conteúdo do Curso
C++ Poo
C++ Poo
Membros Estáticos da Classe
Na programação orientada a objetos, a palavra-chave static
possui um significado especial, alterando o comportamento de atributos e métodos. Existem cenários em que é necessário que certos dados sejam compartilhados entre todos os objetos de uma classe, em vez de serem replicados para cada instância. É nesse contexto que os membros de dados estáticos são utilizados.
Sintaxe dos Membros Estáticos
Criar um membro estático de uma classe é simples. Basta adicionar a palavra-chave static
antes da declaração.
Example.h
class Example { public: static int static_attibute; static void static_method() { std::cout << "Static method!" << std::endl; } };
No exemplo acima, static_attribute
e static_method()
são declarados como membros de dados estáticos da class Example
. Diferente dos membros de dados regulares, os membros de dados estáticos estão associados à classe em si, e não a objetos individuais. Isso significa que todas as instâncias de Example
compartilham os mesmos membros estáticos.
A inicialização é fundamental para membros de dados estáticos, e deve ser feita fora da classe, a menos que o membro também utilize a palavra-chave const
.
FirstExample.h
SecondExample.h
class Example { public: static int static_attribute; static void static_method() { std::cout << "Static method!" << std::endl; } }; int Example::static_attribute = 0;
Benefícios do Uso de Membros Estáticos
O uso de membros de dados estáticos e funções membros estáticas oferece diversos benefícios.
main.cpp
#include <iostream> class Example { public: static int static_attribute; static void static_method() { std::cout << "Static method!" << std::endl; } }; // Initialization of the static member variable int Example::static_attribute = 0; int main() { Example obj1, obj2; obj1.static_attribute = 100; // Modifying static_attribute through obj1 std::cout << obj1.static_attribute << std::endl; std::cout << obj2.static_attribute << std::endl; Example::static_attribute = 25; // Modifying static_attribute through class Example::static_method(); // Calling the static method through class }
Obrigado pelo seu feedback!