Ir ao conteúdo
  • Cadastre-se
Gabriel Lemos Alves

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

Recommended Posts

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();
            }
    }
}
 

Editado por Gabriel Lemos Alves

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Po valeu mesmo é que esse ai foi o primeiro exercício então não tinha muita base de como fazer kkkk. Valeu pela explicação agora entendi.

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

×