Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda em codigo simples


tifian

Pergunta

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 para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...