giovedì 25 settembre 2014

Compito lezione 24/09/2014 - Esercitazione sull'utilizzo dei Costruttori

Esercitazione sull'utilizzo dei Costruttori con e senza passaggio di parametri, degli ambienti public e private, dei metodi e degli attributi.

#include <iostream>
using namespace std;
class persona{   //dichiarazione della classe persona
        public:   // con public rendo i metodi accessibili dal main()
        persona();   //costruttore senza passaggio di parametri
        persona(int a);   //costruttore con passaggio di un parametro

       ~persona();   //distruttore
        void aggiorna();   //metodo aggiorna
        void visualizza();   //metodo visualizza
        private:   // con private rendo gli attributi non accessibili al di fuori della classe a cui appartengono
        char nome[15];   //dichiarazione stringa nome  
        char cognome[15];   //dichiarazione stringa cognome
        int eta;   //dichiarazione variabile eta
        };

persona::persona()   //definizione del costruttore senza passaggio di parametri
{
cout <<" Inserisci Nome: ";
cin >> nome;   //salvo l'input da utente nella stringa nome
cout << endl <<" Inserisci Cognome: ";
cin >> cognome;   //salvo l'input da utente nella stringa cognome
cout << endl <<" Inserisci eta': ";
cin >> eta;   //salvo l'input da utente nella variabile eta
}

persona::persona(int a)   //definizione del costruttore con passaggio di un parametro
{
cout << endl <<" Inserisci Nome: ";
cin >> nome;   //salvo l'input da utente nella stringa nome
cout << endl <<" Inserisci Cognome";
cin >> cognome;   //salvo l'input da utente nella stringa cognome
eta=a;   //passo il valore del parametro a ricevuto dalla chiamata nel main() alla variabile eta
cout << endl <<"L'eta' passata dal main e': " <<a<< endl;
}

void persona::visualizza()   //definizione metodo visualizza
{ cout << endl << " Dati dipendente: "<< nome <<" - " <<cognome <<" - " <<eta <<endl;   
//visualizzo i dati inseriti dall'utente
}

persona :: ~persona()   //definizione del distruttore per comprendere funzionamento
{
   cout << "sono il distruttore";
}

void persona :: aggiorna()   //definizione metodo aggiorna
{
   visualizza();   //chiamata al metodo visualizza
   char mod;   //variabile char di appoggio per scelta operazione utente
   do{
      cout << " Vuoi modificare i dati inseriti? S/N";   
//chiedo conferma all'utente per la modifica o meno dei dati inseriti
      cout << endl;
      cin >> mod;  
      if ((mod=='S')||(mod=='s'))   //se l'utente vuole modificare i dati
          persona();   //richiamo il costruttore
      else if ((mod!='N')&&(mod!='n'))   
//altrimenti controllo se la risposta fornita dall'utente è diversa da n o N
         {
          cout << " Dato non corretto";   
//in tal caso non avendo risposto ne con s-S ne con n-N vuol dire che ha dato una risposta non corretta e glielo comunico
         }
      }while(((mod=='S')||(mod=='s'))||((mod!='n')&&(mod!='N')));   
//continuo la procedura mente la risposta è diversa da n-N

}
 main()
 {
  char menu;
  do{
  cout << "Compito su lezione 24/09/2014";
  cout << endl << endl;
  cout << "Inserimento da istanza oggetto dipendente con Costruttore senza passaggio \ndi parametri:";
  cout << endl << endl;
  persona dipendente;   
//istanzio l'oggetto dipendente di classe persona tramite costruttore senza passaggio di parametri
  cout << "Inserimento da istanza oggetto dipendente con Costruttore con passaggio \ndi parametri:";
  cout << endl;
  persona dipendenteInt(5);   
//istanzio l'oggetto dipendente di classe persona tramite costruttore con passaggio di un parametro
  cout << "Richiamo a metodo 'Aggiorna()' con al suo interno richiamo al metodo 'Visualizza'";
  cout << endl << endl;
  dipendente.aggiorna();   //chiamata al metodo aggiorna dell'oggetto dipendente
  cout << "Inserimento da vettore di oggetti dipendente con Costruttore senza passaggio (3 elementi) \ndi parametri:";
  cout << endl << endl;
  persona dipv[3];   
//istanzio un vettore di oggetti dipendente di classe persona con tre elementi tramite costruttore senza passaggio di parametri
        cout << "Vuoi ripetere il programma? ";
        cout << endl;
        cin >> menu;
  }while((menu=='s')||(menu=='S'));   //se l'utente non vuole ripetere il programma, fine
  cout << endl << endl << endl;
  return 0;
}



mercoledì 24 settembre 2014

Costruttori in c++

I Costruttori - Lezione 3 OOP 


Il costruttore è eseguito ogni volta che viene creato un nuovo oggetto della classe cui appartiene.
Tramite il costruttore possiamo determinare il comportamento che l’oggetto avrà alla sua creazione: ad esempio possiamo utilizzare i costruttori per inizializzare le variabili della classe.

Come si dichiara il costruttore di una classe?

Il costruttore di una classe deve sempre avere lo stesso nome della classe in cui è definito e può accettare argomenti;
Prova::Prova(int x, int y)   //dichiarazione di un costruttore con passaggio di due parametri interi

*!* Se non dichiarato esplicitamente all'interno della classe, il costruttore viene generato automaticamente dal compilatore (costruttore di default).

*!* Non bisogna specificare il tipo di ritorno (neanche void), un costruttore ritorna "qualcosa" e precisamente l'oggetto che ha appena creato.

Possono esistere più costruttori in una stessa classe. Il C++ li distingue in base alla lista degli argomenti.
Se invece in una classe esiste almeno un costruttore con argomenti, il C++ non mette a disposizione alcun costruttore di default e perciò questo, se necessario, va esplicitamente definito come metodo della classe. In sua assenza, i costruttori con argomenti non vengono invocati automaticamente e pertanto ogni istruzione del programma che determini, direttamente o indirettamente, la creazione di un oggetto, deve contenere la chiamata esplicita di uno dei costruttori disponibili, nel modo che dipende dalla categoria dell'oggetto interessato. 

Esempio di codice con Costruttori definiti dal programmatore: