Ir ao conteúdo
  • Cadastre-se

Problema com orientação a objetos em c++


Ir à solução Resolvido por vangodp,

Posts recomendados

Então galera, estou com um problema no meu código, ele está fazendo as instruções certas que são: Ler um numero qualquer de alunos e um numero qualquer de notas, a media e mostrar tudo em tela, porém na parte de imprimir tudo na tela ele atribui as ultimas notas que digitei a todos os alunos. Ex. de entrada: Aluno A ( Notas: 3,9,10) ; Aluno B (Notas: 5,6,7). Na hora de mostrar os dados ele mostra: Aluno A (Notas:5,6,7) Aluno B (Notas:5,6,7). Preciso também fazer as médias das notas ainda.É um exercício da faculdade se alguém conseguir ajudar :D .

 

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

using namespace std;

class pessoa{

    private:
        char nome[30];
        float nota;

    public:
        void cadastrar_nome();
        void consultar_nome();
        void cadastrar_nota();
        void consultar_nota();
};

pessoa p[1];

// CONSTRUTOR -----------------------------

void pessoa :: cadastrar_nome(){
    cout<< "Digite o nome do Aluno: ";
    cin>> nome;

};
void pessoa :: cadastrar_nota(){
    cout<< "Digite a Nota: ";
    cin>> nota;
};

void pessoa :: consultar_nome(){
    cout<< "Nome: "<<nome  <<endl;
};
void pessoa :: consultar_nota(){
    cout<< "Nota: "<<nota  <<endl;
};

int main()
{   int i,j,x,y;

    cout<< "Digite o numero de Alunos: ";
    cin>> x;
    cout<< "Digite o numero de Notas: ";
    cin>> y;

    for(i=0;i<x;i++){
        p[ i ].cadastrar_nome();
            for(j=0;j<y;j++){
            p[j].cadastrar_nota();
            }
    }
    for(i=0;i<x;i++){
        p[ i ].consultar_nome();
            for(j=0;j<y;j++){
            p[j].consultar_nota();
            }
    }
}
 

Link para o comentário
Compartilhar em outros sites

  • Solução

se você declarou um array de de uma só pessoa(pessoa p[1]) como você quer cadastrar múltiplas pessoas? Ou você declara um array maior de pessoas que x ou como minimo igual. Exemplo... si tiver que ler a nota de 10 alunos pessoa p[10]; ou pessoa pessoa p[100];, mas nunca você deve fazer pessoa p[9]; ou menor. O correto seria você fazer isso:
 

#include <iostream>
using namespace std;

class pessoa {

private:
    char nome[30];
    float* nota;
    int tnota; //tamanho de nota
    
public:
    void cadastrar_nome();
    void consultar_nome();
    void cadastrar_nota();
    void consultar_nota();
    void setSizeNota(int);
    
    //destrutor
    ~pessoa();
};

//pessoa p[1];

void pessoa::setSizeNota(int tam){
    tnota = tam;
    nota = new float[tnota];
}

//destrutor
pessoa::~pessoa(){
    delete[] nota;
    cout << "Recursos liberados" << endl;
}

void pessoa :: cadastrar_nome() {
    cout << "Digite o nome do Aluno: ";
    cin >> nome;
};

void pessoa :: cadastrar_nota() {
    for (int i = 0; i<tnota ; i++) {
        cout << "Digite a Nota "<< i << ": ";
        cin >> nota[i];
    }
};

void pessoa :: consultar_nome() {
    cout << "Nome: " << nome  << endl;
};

void pessoa :: consultar_nota() {
    for (int i = 0; i<tnota ; i++) {
        cout << "Nota " << i << ": " << nota[i]  << endl;
    }
};


int main() {
    int i, j, x, y;
    pessoa* p;
    
    cout << "Digite o numero de Alunos: ";
    cin >> x;
    cout << "Digite o numero de Notas: ";
    cin >> y;
    
    //array dinamico de pessoas
    p = new pessoa[x];
    
    //array interno dinamico de notas
    for ( i = 0; i<x ; i++) {
        p[i].
        setSizeNota(y);
    }

    for ( i = 0; i < x; i++ ) {
        p[ i ].cadastrar_nome();
        p[i].cadastrar_nota();
    }
    
    for ( i = 0; i < x; i++ ) {
        p[ i ].consultar_nome();
        p[ i ].consultar_nota();
    }
    
    delete[] p;
    
}

Ou seja, usar memória dinâmica.
 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!