Jump to content
Fórum Script Brasil
  • 0

Ajuda em codigo simples


tifian

Question

Olá, estou iniciando no c++ e aprendi agora o static e construtores e estou fazendo um codigo e não funciona uma coisinha, colocarei o codigo e dps digo o problema.

//Trabalho

#include <iostream.h>
#include <conio.h>

class aluno
    {
        private:
            int serie, grau;
            char nome[20];
            static int n;
        public:
            aluno() {n++;}
            ~aluno() {n--;}
            void inseredados()
            {
                cout <<"\n Digite seu nome: ";
                cin >> nome;
                cout <<"\n Digite sua serie: ";
                cin >> serie;
                cout <<"\n Digite o grau: ";
                cin >> grau;
                printdata();
            }
            void printdata()
            {
                cout <<"\n Nome do aluno: " << nome;
                cout <<"\n Serie do aluno: "<< serie;
                cout <<"\n Grau do aluno: " << grau;
            }
            int numalunos() const
            {
                return n;
            }
    };

    int aluno::n = 0;
    const MAX=10;

    void main()
    {
        aluno A[MAX],x;

        int i=0,y;
        char resp;

        do{
            A[i].inseredados();
            cout <<"\n Adicionar mais um aluno? (s/n)";
            cin >> resp;
            } while(resp != 'n' && i<MAX);

        y = x.numalunos()-1;
        cout <<"\n Numero de alunos: " << y;
        getch();

    }

Então a variavel static n, era pra guarda quantos alunos eu botasse, o que eu aprendi (e em outro exemplo deu certo). É que colocando o n++ ali dentro do construtor, cada vez que eu crio um objeto ele incrementa o n. Mas nesse caso como o vetor tem 10 posiçoes ele logo de cara fica 10 no n, e não muda. Mesmo q eu cadastre só 2 alunos, ou seja 2 objetos. Ele sempre dá 10.

O que posso fazer?

Abraço

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

O que acontece:

Como você colocou n++ no construtor e esse método é acionado sempre quando você cria um objeto. Quando você declarou o vetor de objetos, TODOS OS 10 OBJETOS FORAM CRIADOS NA MEMÓRIA INDEPENDENTEMENTE DE VOCÊ TER CADASTRADO O ALUNO.

Aí o n que iniciou com 0, ao declarar o vetor de objetos, ele acionou o método construtor 10 vezes e depois criou um outro objeto chamado x, executando mais uma vez o método construtor.

O certo não seria incrementar no método construtor, mas sim após inserir os dados do aluno.

Espero ter ajudado!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...