Aiuto classi e array di oggetti

di Anonimizzato18190 il
4 risposte
Salve raga,ho un problema con un array di oggetti...vi mando il codice:

#include <iostream>
#include <string.h>
using namespace std;


class Ragazzo {
int eta,altezza;
string nome;
public:
Ragazzo(){
eta=0;
altezza=0;
nome="";
};
Ragazzo(int age,int tall,int name){
eta=age;
altezza=tall;
nome=name;
}
void insert();
void setage(int age){eta=age;}
void settall(int tall){altezza=tall;}
void setname(string name){nome=name;}
int getage(){return eta;}
int gettall(){return altezza;}
string getname(){return nome;}
void visual();
};





void Ragazzo::insert(){
int age,tall;
string name;
cout<<"inserire eta'' ragazzo:"<<endl;
cin>>age;
setage(age);
cout<<"inserire altezza ragazzo:"<<endl;
cin>>tall;
settall(tall);
cout<<"inserire nome:"<<endl;
cin>>name;
setname(name);
}


void Ragazzo::visual(){
cout<<"nome"<<endl<<getname()<<endl;
cout<<"eta'"<<endl<<getage()<<endl;
cout<<"altezza"<<endl<<gettall()<<endl;
}

void Insert(){
int n;
Ragazzo lista[n];
cout<<"inserire numero ragazzi:"<<endl;
cin>>n;
for (int i=0;i<n;i++){

lista.insert();
}
for (int i=0;i<n;i++){
lista.visual();
}
}


int main(){
Insert();
return 0;
}


quando inserisco tutti i dati del primo ragazzo,il programma non passa al secondo ragazzo ma va in crash.
Se invece di utilizzare n come dimensione dell'array utilizzo un valore statico,il programma funziona normalmente...ho visto che degli amici lo hanno fatto con i puntatori e l'operatore new...mi sapreste dare qualche consiglio o spiegazione in merito?

4 Risposte

  • Questa linea

    Ragazzo lista[n];

    ha un senso se la esegui DOPO che hai inserito il valore di n ...

    Se la esegui PRIMA, che valore ha n in quel momento?
  • Perfettamente ragione...grazie mille!
    cercavo un modo di semplificare l'esercizio,visto che degli amici hanno addirittura creato una classe di listaRagazzo con puntatori a classe e creato un array con l'operatore new...che sarà anche corretto,ma superfluo per come devo fare io l'esame...così ho trovato il modo di creare una lista di oggetti senza allocare dinamicamente tramite puntatori
  • Se invece volessi passare un array a funzione...così mi esce errore...qual'è la sintassi corretta?

    #include <iostream>
    #include <string.h>
    using namespace std;


    class Ragazzo {
    int eta,altezza;
    string nome;
    public:
    Ragazzo(){
    eta=0;
    altezza=0;
    nome="";
    };
    Ragazzo(int age,int tall,int name){
    eta=age;
    altezza=tall;
    nome=name;
    }
    void insert();
    void setage(int age){eta=age;}
    void settall(int tall){altezza=tall;}
    void setname(string name){nome=name;}
    int getage(){return eta;}
    int gettall(){return altezza;}
    string getname(){return nome;}
    void visual();
    };





    void Ragazzo::insert(){
    int age,tall;
    string name;
    cout<<"inserire eta'' ragazzo:"<<endl;
    cin>>age;
    setage(age);
    cout<<"inserire altezza ragazzo:"<<endl;
    cin>>tall;
    settall(tall);
    cout<<"inserire nome:"<<endl;
    cin>>name;
    setname(name);
    }


    void Ragazzo::visual(){
    cout<<"nome"<<endl<<getname()<<endl;
    cout<<"eta'"<<endl<<getage()<<endl;
    cout<<"altezza"<<endl<<gettall()<<endl;
    }

    void Insert(int n,Ragazzo lista[]){
    for (int i=0;i<n;i++){

    lista.insert();
    }
    }




    int main(){
    int n;
    Ragazzo lista[n];
    cout<<"inserire numero ragazzi:"<<endl;
    cin>>n;
    Insert(n,Ragazzo lista[n]);
    return 0;
    }
  • Risolto...dovrebbe andare così

    #include <iostream>
    #include <string.h>
    using namespace std;


    class Ragazzo {
    int eta,altezza;
    string nome;
    public:
    Ragazzo(){
    eta=0;
    altezza=0;
    nome="";
    };
    Ragazzo(int age,int tall,int name){
    eta=age;
    altezza=tall;
    nome=name;
    }
    void insert();
    void setage(int age){eta=age;}
    void settall(int tall){altezza=tall;}
    void setname(string name){nome=name;}
    int getage(){return eta;}
    int gettall(){return altezza;}
    string getname(){return nome;}
    void visual();
    };





    void Ragazzo::insert(){
    int age,tall;
    string name;
    cout<<"inserire eta'' ragazzo:"<<endl;
    cin>>age;
    setage(age);
    cout<<"inserire altezza ragazzo:"<<endl;
    cin>>tall;
    settall(tall);
    cout<<"inserire nome:"<<endl;
    cin>>name;
    setname(name);
    }


    void Ragazzo::visual(){
    cout<<"nome"<<endl<<getname()<<endl;
    cout<<"eta'"<<endl<<getage()<<endl;
    cout<<"altezza"<<endl<<gettall()<<endl;
    }

    void Insert(int n,Ragazzo lista[]){
    for (int i=0;i<n;i++){

    lista.insert();
    }
    }




    int main(){
    int n;
    cout<<"inserire numero ragazzi:"<<endl;
    cin>>n;
    Ragazzo lista[n];
    Insert(n,lista);
    return 0;
    }
Devi accedere o registrarti per scrivere nel forum
4 risposte