Jump to content
kaub0st3r

Duvida em um procedimento

Recommended Posts

kaub0st3r

Alguém me podia explicar como fosse muito "burro" este procedimento:

// static members in classes
#include <iostream>
using namespace std;

class CDummy {
public:
static int n;
CDummy () { n++; };
~CDummy () { n--; };
};
int CDummy::n=0;
int main () {
CDummy a;
CDummy b[5];
CDummy * c = new CDummy;
cout << a.n << endl;
delete c;
cout << CDummy::n << endl;
return 0;
}

Ando a iniciar a programação com classes, sei que cria 2 objectos (a e b[]), não sei o que faz o

CDummy * c = new CDummy;

, sei sim que *c é um ponteiro para o objecto c, sei o que é o construtor e o destruidor, mas não sei porque dá como output 7 e 6.

Ando a seguir o tutorial Cplusplus http://www.cplusplus.com/doc/tutorial/ e bloqueei aqui.

thanks ;)


blogue: migalhasfrog.blogspot.comtwitter: ricardo_pt

Share this post


Link to post
Share on other sites
Rui Carlos

Acho que o atributo n conta o número de instâncias criadas menos as destruídas.

Depois de usares o delete passas a ter menos uma instância do objecto.

Share this post


Link to post
Share on other sites
pikax

Ando a iniciar a programação com classes, sei que cria 2 objectos (a e b[]), não sei o que faz o

CDummy * c = new CDummy;

, sei sim que *c é um ponteiro para o objecto c, sei o que é o construtor e o destruidor, mas não sei porque dá como output 7 e 6.

Ele não só cria 2 objectos, cria mais, porque o b[5] é um vector(ou array como queiram chamar) então vai criar 5 objectos distintos que serão guardados na variavel "b".

Relativo ao:

CDummy * c = new CDummy;

Isto é memória dinâmica, significa que a variavel "c" vai apontar para um local da memoria, quando usas o new CDummy, ele vai criar um uma variável na memoria, e o "c" vai apontar para esse local.

O resultado dá 7, porque no momento que "a.n" é chamado, o programa criou um objeto para o "a", depois como tu crias um vector b(b[5] que eu já expliquei em cima) e vais apontar C para uma nova variavel, depois "a" é chamado e mostra 7 porque tu criaste 7 objectos(1+5+1), depois tens o "delete c;" que irá apagar a variavel que c estava a apontar(como tens um destrutor que faz uma decrementação), o ultimo output será(7-1) que é 6.

Espero que tenhas percebido, qualquer duvida que tenhas posta.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
kaub0st3r

whooo...thanks  :thumbsup:


blogue: migalhasfrog.blogspot.comtwitter: ricardo_pt

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.