photo
+ Responder ao Tópico
Resultados de 1 a 1 de 1

Thread: Membros Estáticos de uma Classe/Estrutura Membros Estáticos

  1. #1 Fechar a publicação
    Senior Member jssuser's Avatar jssuser's Avatar
    Data de afiliação
    Aug 2018
    Postagens
    1,503
    Obrigado
    209
    Agradecimentos 1,580 Tempos em 856 Postagens
    AssinarAssinar
    subscritar: 0

    Membros Estáticos de uma Classe/Estrutura Membros Estáticos

    Os membros de uma classe podem ser declarados usando o modificador de classe de armazenamento static. Esses membros de dados são compartilhados por todos as instâncias desta classe e são armazenados em um lugar. Membros de dados não estáticos são criados para cada variável de objeto de classe.

    A incapacidade de declarar membros estáticos de uma classe teria levado a necessidade de declarar estes dados no nível global do programa. Isso quebraria a relação entre os dados e a classe deles, e não seria consistente com o paradigma básico da OOP - juntar dados e métodos para manipulá-los em uma classe. O membro estático permite que dados de classe não específicos a uma particular instância existam no escopo da classe.

    Desde que um membro de classe estática não dependa de uma particular instância, a referência a ele é como se segue:

    class_name::variable

    onde class_name é o nome da classe, e variable é o nome do membro da classe.

    Como se vê, para acessar o membro estático de uma classe, o operador de resolução de contexto :: é usado. Ao acessar um membro estático de dentro de métodos da classe, o operador de contexto é opcional.

    Membro estático de uma classe deve ser explicitamente inicializado com o valor desejado. Para isso, deve ser declarado e inicializado em escopo global. A sequência de inicialização dos membros estáticos corresponderá a sequência de sua declaração em escopo global.

    Por exemplo, temos a classe CParser usado para separar o texto, e precisamos contar o número total de palavras e caracteres processados. Nós só precisamos declarar os membros de classe necessários como estáticos e inicializá-los no nível global. Então todas as instâncias da classe usarão um contador comum para palavras e caracteres.

    //+------------------------------------------------------------------+
    //| Classe "Analisador de Texto" |
    //+------------------------------------------------------------------+
    class CParser
    {
    public:
    static int s_words;
    static int s_symbols;
    //--- Construtor e destrutor
    CParser(void);
    ~CParser(void){};
    };
    ...
    //--- Inicialização de membros estáticos da classe Parser no nível global
    int CParser::s_words=0;
    int CParser::s_symbols=0;

    Um membro de classe estático pode ser declarado com a palavra-chave const. Tais constantes estáticas devem ser inicializadas no nível global com a palavra-chave const:

    //+------------------------------------------------------------------+
    //| Classe "Stack" para armazenar dados processados |
    //+------------------------------------------------------------------+
    class CStack
    {
    public:
    CStack(void);
    ~CStack(void){};
    ...
    private:
    static const int s_max_length; // Capacidade máxima da pilha
    };

    //--- Inicialização da constante estática da classe CStack
    const int CStack::s_max_length=1000;

    Ponteiro this

    A palavra-chave this denota um ponteiro implicitamente declarado para si mesmo — para uma instância específica da classe, no contexto do qual o método é executado. Pode ser usado somente em métodos não estáticos da classe. O ponteiro this é um membro não estático implícito de qualquer classe.

    Em funções estáticas você pode acessar somente membros/métodos estáticos de uma classe.

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  2. The Following User Says Thank You to jssuser For This Useful Post:

    Não registrado (1 )

+ Responder ao Tópico

Permissões de postagens

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts