Ir ao conteúdo
  • Cadastre-se

C++ Declaração de dados-membro estáticos


Bimetal

Posts recomendados

Olá pessoal. Eu tenho uma dúvida a respeito da declaração de dado-membro estático em uma classe. Por que não basta que eu declare um dado-membro estático dentro da classe? Por que eu preciso fazer uma definição global desse membro? Isso tem alguma coisa a ver com a heap?

Link para o comentário
Compartilhar em outros sites

Não sei se entendi muito bem sua pergunta, mas basta declarar dentro da classe. Exemplo:

#include <iostream>

using namespace std;

class Classe
{
    public:
    static void membro_estatico()
    {
        cout << "Este é um método estático";
    }
};
int main()
{
    Classe::membro_estatico();
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

56 minutos atrás, Flávio Pedroza disse:

Não sei se entendi muito bem sua pergunta, mas basta declarar dentro da classe. Exemplo:


#include <iostream>

using namespace std;

class Classe
{
    public:
    static void membro_estatico()
    {
        cout << "Este é um método estático";
    }
};
int main()
{
    Classe::membro_estatico();
    return 0;
}

 

Então, no meu caso eu não estou lidando com uma função-membro, mas sim com um dado-membro.

Link para o comentário
Compartilhar em outros sites

10 horas atrás, MB_ disse:

Quis dizer atributo?

Exatamente.

adicionado 13 minutos depois

@Flávio Pedroza Ok. Eu achei uma explicação, mas achei ela muito confusa. Ela diz o seguinte: quando se declara um dado-membro estático dentro de uma classe, não há uma definição deste membro. Ou seja, não há uma alocação de memória para este membro.

E depois ela segue dizendo: a definição global feita fora da classe instrui o compilador a alocar espaço para o dado-membro estático.

Essa explicação não me ajudou em nada, mas talvez te ajude em me ajudar.

 

Link para o comentário
Compartilhar em outros sites

Primeiro não confundir declarar com implementar, isso é muito importante. Declarar é "avisar" ao compilador de que existirá certas variáveis. É justo no implementar que as variáveis ganham espaço na memória, e é então quando você já pode usar ditas variáveis.
 

adicionado 0 minutos depois
#include <iostream>
using namespace std;

class soma {
    public:
        soma(){}
        ~soma(){}
        static int adicao(int um_a, int um_b){
            seu_a = um_a;
            seu_b = um_b;
            return (seu_a + seu_b);
        }
    private:
        //Aqui declaramos que existirá esses dados, mas realmente ainda não estão na memoria.
        static int seu_a;
        static int seu_b;
};
//Aqui definimos. Aqui é onde se aloca espaço. Sei não fizer isso não será possivel chamar soma::adicao(int, int)
int soma::seu_a;
int soma::seu_b;


int main (){
    cout << soma::adicao(10,5);
    
    cin.ignore();
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...