|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: May 2010
Messaggi: 14
|
help classi e puntatori c++ per esame
salve a tutti ragazzi,ho questo programma svolto ma faccio fatica a capire alcune cose e la tipologia d'esame è molto simile tra i vari appelli.
In pratica devo costruire una classe Persona con nome e cognome,una classe derivata studente con matricola e tramite la bubblesort ordinare i nomi in base alla matricola...il tutto usando le classi. #include<iostream> #include<string.h> using namespace std; class Persona{ // inizio punto 1 private: string Nome,Cognome; public: Persona(){ //definizione costruttore Nome=""; Cognome=""; }; Persona(string name,string subname){ //funzione costruttore da definire dentro la classe Nome=name; Cognome=subname; } void insert(); //definizione funzioni void setname(string name) {Nome=name;} void setsubname(string subname) {Cognome=subname;} string getname() {return Nome;} string getsubname(){return Cognome;} void visual(); }; void Persona::insert(){ //funzioni string name,subname; cout<<"inserire nome persona:"<<endl; cin>>name; setname(name); cout<<"inserire cognome persona:"<<endl; cin>>subname; setsubname(subname); } void Persona::visual(){ cout<<"nome:"<<endl<<getname()<<endl; cout<<"cognome:"<<endl<<getsubname()<<endl; } //fine punto 1 class Studente: public Persona{ //inizio punto 2,definizione sottoclasse studente int Matricola; public: Studente(){ //definizione costruttore Matricola=0; }; Studente(int mat){ //funzione costruttore Matricola=mat; } void insertmat(); //definizione funzioni punto 2 void setmat(int mat) {Matricola=mat;} int getmat() {return Matricola;} void visualmat(); }; void Studente::insertmat() { //funzioni 2 int mat; cout<<"inserire la matricola:"<<endl; cin>>mat; setmat(mat); } void Studente::visualmat(){ cout<<"matricola:"<<getmat()<<endl; } //fine punto 2 class ListaStudenti: public Studente{ //inizio punto 4 Studente *lista; //dichiaro un puntatore lista che punta a una variabile Studente int n; public: void ordina(); void visuallista(); ListaStudenti(){ //definizione costruttore lista cout<<"inserire il numero di studenti:"<<endl; cin>>n; lista=new Studente[n]; //dichiaro un array di puntatori a studente (new funziona come & e restituisce un indirizzo) for (int i=0;i<n;i++){ cout<<"inserisci studente"<<i+1<<endl; lista[i].insert(); lista[i].insertmat() ; //richiamo la funzione di inserimento di Persona,siccome che listastudenti è una sottoclasse di studenti che è una sottoclasse di persona } } ~ListaStudenti(){delete[] lista;} //distruttore }; void ListaStudenti::ordina(){ //algoritmo di ordinamento lista for(int i=0;i<n;i++){ for(int j=0;j<n-1;j++){ if (lista[j].getmat()>lista[j+1].getmat()){ //chiamo la funzione di studente getmat e ordino quella Studente temp = lista[j+1]; lista[j+1] = lista[j]; lista[j] = temp; } } } } void ListaStudenti::visuallista(){ //utilizzo la funzione visual di persona per visualizzare l'array di studenti for(int i=0;i<n;i++){ lista[i].visual(); lista[i].visualmat(); } } int n; Studente lista[n]; main(){ ListaStudenti a; cout<<"lista non ordinata:"<<endl; a.visuallista(); a.ordina(); cout<<"lista studenti ordinata:"<<endl; a.visuallista(); return 0; } Mi servirebbe una mano col capire costruttori e distruttori...in particolare vorrei capire se ad esempio avessi definito Nome e Cognome in public cosa sarebbe cambiato con il costruttore...consequenzialmente quindi vorrei capire le funzioni setname e getname a cosa servono(se ho capito bene,definendo Nome e Cognome privati non posso accedervi direttamente e fare le operazioni su di loro,ma tramite altre variabili che poi daranno il loro valore a Nome e Cognome tramite get e set,giusto?). Infine siccome non sono praticissimo di puntatori,per realizzare la bubblesort si è usato un array di Studente con dei puntatori e l'operatore new...mi servirebbe sapere qualcosa in più su questo procedimento e se c'è un modo di semplificare le cose usando magari un array statico di Studente...grazie a tutti per l'attenzione! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:56.



















