Corso C++ Parte 4: classi e metodi

Uno degli elementi fondamentali del linguaggio C++ è la classe, ossia un insieme di funzioni e variabili a cui si applicheranno poi dei metodi ne programma principale.

In C++, come anche in tanti altri linguaggi di programmazione, una classe è un elemento del codice che contiene tutte le informazioni che poi verranno utilizzate nel programma, come variabili, funzioni e metodi. La comodità di scrivere una classe sta nel fatto che nel programma eseguibile (il cosiddetto main) non sarà necessario dichiarare le variabili di interesse o le funzioni da applicare poichè sono già state introdotte nella classe. L’unica operazione da fare è implementare nel codice gli elementi seguendo lo schema imposto dal programma stesso. Lo schema generale di una classe è il seguente:

 

class esempio {

     variabile1;

     variabile2;

     variabile3;

     funzione1;

     funzione2;

};

 

La parola chiave principale per generare una classe è class. Successivamente si definisce il nome della classe, ricordando che il C++ è case sensitive. Infine, tra parentesi graffe, si vanno a definire le variabili e le funzioni che poi andranno implementate nel codice. Solitamente una classe viene generata in un file a parte del progetto, definito come classe.h, mentre il codice eseguibile del programma si trova in programma.cpp. In questo caso è necessario inserire la dicitura include “classe.h” all’interno del file del programma per poter richiamare e successivamente applicare i metodi descritti nella classe. E’ possibile anche definire la classe direttamente nel file .cpp, però lo sconsigliamo poichè in questo modo la classe può essere utilizzata solamente dal programma nel quale la definiamo. Se invece viene creata separatamente, è possibile sfruttarla per altri programmi.

Prima di parlare più nello specifico della classe, è bene parlare dei modificatori, ossia parametri che definiscono la visibilità degli elementi di una classe.

Modificatori: public, private, protected

La visibilità di una variabile o di un metodo può essere modificata tramite appositi termini. Di default, se non viene specificato il modificatore, gli elementi della classe sono settati su private. Quindi le variabili e i metodi possono essere utilizzati solamente all’interno della classe (vedasi esempio di prima). Ciò è contraddittorio, visto che il codice del programma deve richiamare in qualche modo la classe affinchè possano essere implementati i metodi associati. Dunque bisogna utilizzare il modificatore public, per rendere visibile gli elementi della classe anche al di fuori di essa. Quindi semplicemente scriviamo:

class esempio{
    
   public:
    
       variabile1;
       variabile2;
       variabile3;
       funzione1;
       funzione2;
       funzione3;
};

Grazie ad una semplice parola, è possibile implementare i metodi della classe anche su codici esterni.

Esiste poi un terzo modificatore, chiamato protected. E’ una via di mezzo tra public e private. Un elemento settato su protected può essere richiamato solamente da funzioni che dichiarano tali elementi o da altre classi con permessi pubblici/privati che derivano dalla classe genitrice. Una variabile (o funzione) di tipo protected non è né private, poiché può essere comunque richiamata al di fuori della classe, né public, visto che può essere utilizzata solamente dalle funzioni che dichiarano quella specifica variabile al loro interno.

Bisogna fare molta attenzione alle nomenclature indicate in questo paragrafo. Settare una variabile con il modificatore sbagliato può portare ad errori nel compilatore, che magari non riesce ad individuare un metodo implementato correttamente ma che è stato settato come private.

Si possono anche utilizzare modificatori differenti su una stessa classe. Vediamo il seguente esempio pratico:

class Impiegato{

   private:

      char nome;
      char cognome;
      char codicefiscale;

   public:

      void inserisciNome();
      void inserisciCognome();
      void inserisciCodiceFiscale(); 
    
};

In questo caso abbiamo definito le variabili come private, mentre i metodi come public. Ciò significa che le variabili saranno utilizzabili solo nella classe, mentre i metodi anche al di fuori.

NOTA: una classe definisce il cosiddetto oggetto, ossia un elemento che racchiude in se le caratteristiche definite nella classe, con le proprie variabili e i propri metodi da implementare. L’essenza del C++ si basa proprio sulla programmazione ad oggetti, ovvero sull’uso delle classi.

[adsense]

Implementazione dei metodi

Una volta che abbiamo definito la classe, salvandola opportunamente come classe.h, bisogna spostarsi nel codice del programma eseguibile ed implementare adeguatamente i metodi e le variabili.

OSSERVAZIONE: nella classe i metodi vengono solamente definiti, senza specificarne il funzionamento nel dettaglio. E’ possibile esplicitare il funzionamento del metodo sia nella classe stessa che nel codice eseguibile. Il nostro consiglio è quello di esplicitare il metodo direttamente nel codice poichè in questo modo si può definire il metodo della classe in maniera differente su un altro programma, sfruttando però la stessa identica classe.

Spostiamoci ora nel file programma.cpp e prendiamo il seguente esempio:

#include <iostream.h>
include "classe.h"

void Impiegato::inserisciNome( )
{
    cout << Inserire il nome dell'impiegato: ";
    cin >> nome;
    cout << endl;
}
 
void Impiegato::inserisciCognome( )
{
    cout << Inserire il cognome dell'impiegato: ";
    cin >> cognome;
    cout << endl;
}
 
void Impiegato::inserisciCodiceFiscale( )
{
    cout << Inserire il codice fiscale dell'impiegato: ";
    cin >> codicefiscale;
    cin >> endl; 
}
 
 
main()
{
    Impiegato TechByte;
    TechByte.inserisciNome( );
    TechByte.inserisciCognome( );
    TechByte.inserisciCodiceFiscale( );
     
    cout << "Il nome dell'impiegato inserito è: " << TechByte.nome << endl;
    cout << "Il cognome dell'impiegato inserito è: " << TechByte.cognome << endl;
    cout << "Il codice fiscale dell'impiegato inserito è: " << TechByte.indirizzo << endl;
}

Come potete notare, all’inizio del codice, nella riga 2, è stata richiamata immediatamente la classe che avevamo definito prima. Successivamente abbiamo esplicitato i metodi definiti all’interno della classe, definendone il funzionamento nel programma. Infine abbiamo scritto il main, ovvero il programma vero e proprio che verrà eseguito dal compilatore. Abbiamo quindi creato inizialmente un oggetto di tipo Impiegato (che deve riprendere il nome della classe) e lo abbiamo chiamato TechByte. Successivamente abbiamo applicato all’oggetto TechByte i tre metodi definiti nella classe, utilizzando il simbolo “.“. Per imparare ad applicare i metodi correttamente bisogna seguire uno scema ben preciso. Partendo da sinistra, si scrive prima l’oggetto sul quale applicare il metodo e poi il metodo da utilizzare su tale oggetto, utilizzando il punto. Possono essere applicati più metodi su uno stesso oggetto (es. oggetto.metodo1.metodo2).

Alla fine del programma abbiamo scritto un output che restituisca i valori di nome, cognome e codice fiscale dell’oggetto creato, questa volta indicando come metodo la variabile che noi inseriamo da tastiera quando la funzione viene eseguita.

Con questo articolo abbiamo voluto darvi un’introduzione un po’ più dettagliata di come funzionano le classi, i metodi e la loro struttura. In seguito vedremo come creare classi che ereditano da altre e alcuni esercizi di riepilogo.