Ir ao conteúdo
  • Cadastre-se
Bimetal

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

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?

Compartilhar este post


Link para o post
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;
}

 

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando fala

1 hora atrás, Bimetal disse:

dado-membro

, quis dizer atributo?

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, entendi sua dúvida. Realmente, no caso de atributos, é necessário uma definição fora da classe. Infelizmente não sei a razão para isso.

Compartilhar este post


Link para o post
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.

 

Compartilhar este post


Link para o post
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;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@vangodp Entendi. Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!