Ir ao conteúdo
  • Cadastre-se
Diogo00

Criação de variáveis e objetos.

Recommended Posts

Boa tarde pessoal, 

 

Estou fazendo um código, onde eu gostaria de criar alguns objetos em tempo de execução, devido ao fato de não saber quantos irei criar,  tudo depende do usuário. Ja fiz alguns testes, mas quando crio o objeto dentro de uma estrutura de condição, ou uma função que seja, não consigo acessar os métodos depois fora da das estruturas, pois, os objetos ficam locais.

 

Declaração da classe:

using namespace std;
class Grafo
{
	int v; 
	list<int> *adj; 

public:
    Grafo(int v); 
	void adcAresta(int v1, int v2); 
    void dfs(int v);
};

Criando objeto e utilização posterior do método:

// Criando
if ()
{
 Grafo grafo (V);
}

//utilizando método.
grafo.adcAresta(1,2);

 

Alguém tem uma ideia de como melhorar isso ?

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Diogo00 quando você abre um bloco e cria uma variável dentro dele, a variável só existirá dentro do bloco:

 

if () {
 int A;
  
  A = 1; //aqui a variável ainda existe
}

A = 1; // aqui a variável já não existe mais.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <iostream>
using namespace std;

class Foo {
    public:
        Foo() : bar(999) {}
        int getBar(){ return bar; }
        void setBar( const int valor ) { this->bar = valor; }
    private:
        int bar;
};


int main (){
    
    Foo* vetor;
    int n;
    
    if (true){
        cout << "Numero objetos?: ";
        cin >> n;
        vetor = new Foo [n];
    }
    
    for(int i = 0; i<n; i++){
        cout << "Foo " << i+1 << ": " << vetor[i].getBar() << endl;
    }
    
    delete[] vetor;
    
    cin.ignore();
    return 0;
}

memória dinâmica sobrevive a todos os escopos, continuará aí inclusive depois que seu programa termine, até você apaga-lo, por esse motivo é muito importante você liberar a memória com delete[] depois de ter usado new[] para reservar. Como podemos observar é só não perder a direção de memória onde esta o primeiro elemento, isso fazemos com o ponteiro Foo* vetor; logo reservamos a memória dentro do if, e como o ponteiro sim é anterior ao if não tem esse problema, mas lembre liberar o espaço antes de sair do seu programa. Com isso você pode passar esse ponteiro a qualquer função que seu vetor será a prova de escopos. >_<

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

×