Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D La Corte in Rete
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Ernesto Burattini » 22.Programmazione a oggetti: sintassi


Elementi di sintassi

Per dichiarare una classe, si scrive la parola chiave class seguita dal nome dell’oggetto e dai suoi membri; ad esempio una classe Data che gestisce le date è la seguente:

Mostra codice

Elementi di sintassi (segue)

Un elemento generico di una classe è detto membro della classe; i membri hanno nomi diversi all’interno di una classe (anche se due classi distinte possono avere due membri con lo stesso nome).

Tra i membri di una classe ci sono gli elementi di cui essa è costituita, le proprietà, come i tre interi della classe Data, e le function che rappresentano i metodi.

Elementi di sintassi (segue)

Si tenga presente che tra i membri di una classe può apparire anche un’altra classe, così come una struct poteva contenere tra i suoi elementi un’altra struct.


Elementi di sintassi (segue)

Ricordiamo che il campo d’azione (o scope) di una variabile o di una costante è dato dalla più piccola istruzione composta (gruppo di istruzioni racchiuso tra due parentesi graffe) che include la sua dichiarazione.

Con la dichiarazione di una classe introduciamo un nuovo campo d’azione (o scope) all’interno di un programma e, quindi, ai due livelli già noti di scope globale e scope locale si aggiunge un terzo livello: lo scope di classe.

La conseguenza di ciò è che tutti i membri di una classe sono definiti all’interno del campo d’azione della classe e sono, quindi, elementi globali dentro la classe.

I membri pubblici della classe diventano anche elementi globali del programma, mentre i membri privati rimangono visibili soltanto nel loro ambito.

Elementi di sintassi (segue)

I membri privati sono, comunque, visibili dalle funzioni membro e dalle funzioni cosiddette “amiche”, le funzioni friend.

Le funzioni friend sono funzioni non membro che possono accedere ai membri privati di una classe; esse vanno usate con discrezione perché, superando la protezione della classe, possono risultare potenzialmente pericolose.

Elementi di sintassi (segue)

class DECLARATIONS

Una dichiarazione di class equivale a una dichiarazione di un type.
Una variabile il cui type è una class è detta object.
Una class può ereditare proprietà da un’altra classe (di questo però non ci occuperemo in questo corso).

Sintassi:

Mostra codice

Elementi di sintassi (segue)

Ad esempio la dichiarazione per la class Studente è in figura.


Elementi di sintassi (segue)

I data members sono private e questo implica che essi sono visibili solo da parte delle member functions della class Studente.

Funzioni che non appartengono alle member functions della class Studente non possono accedere direttamente a questi dati.
Tra le sette member functions della class Studente vi sono il constructor Studente e il destructor ∼ Studente.

In pratica abbiamo quattro categorie di member functions:

  1. constructor – destructor
  2. access
  3. modify
  4. display.

Il fatto che le member functions sono pubblic significa che dovunque sia definito un oggetto Studente tali member functions possono esse applicate ad esso.

Elementi di sintassi (segue)

Le class declarations sono in genere messe in un header file separato che quindi bisogna richiamare con un # include.

Vediamo la definizione di un oggetto Studente:

Mostra codice

Il file header fornisce informazioni al compilatore per verificare che le chiamate alle member functions siano fatte in maniera corretta.

Elementi di sintassi (segue)

Nel programma precedente abbiamo introdotto la maniera per definire un oggetto:

Sintassi: definizione di un oggetto

class-name object-name;
Studente stu;

Questa definizione è analoga a quella delle funzioni. Essa permette l’allocazione di memoria per tutti i data member previsti.

La vera differenza consiste nel fatto che negli oggetti è esplicitamente previsto un constructor che invece nelle function era implicito.

Elementi di sintassi (segue)

Quindi l’istruzione Studente stu alloca lo spazio necessario e crea l’oggetto di nome stu appartenente alla class Studente.

Il constructor o non fa nulla o inizializza alcuni data members.

Analogamente quando l’oggetto viene rilasciato, il destructor automaticamente libera lo spazio di memoria allocato per esso.
Nell’esempio fatto questo avviene quando si esce dal main.

Elementi di sintassi (segue)

Sintassi per le member functions:

object-name.function-name(actual-arg-list);
stu.calcola_media();

Ovviamente function-name deve essere una public member function della classe Studente a cui l’oggetto stu appartiene.

La parte della definizione denominata function-name(actual-arg-list) è anche detta messaggio e object-name è detto ricevitore del messaggio.

Elementi di sintassi (segue)

member function DEFINITIONS

Le member function definition è preferibile inserirle tutte in un file xxx.cpp
Quindi le declaration vanno in un file xxx.h mentre le definition in un file xxx.cpp. Es.

studente.h ……….. studente.cpp

Sintassi: constructor
class-name::class-name(formal-arg-list)
{

istruzioni

}

Il nome del constructor è il nome della sua stessa classe.
Si noti l’operatore :: detto scope resolution operator.

Elementi di sintassi (segue)

Un constructor senza argomenti è detto di default.
Un tale constructor deve essere dichiarato e definito per una classe class-name se:

  1. La classe class-name ha almeno un constructor che ha uno o più argomenti, e
  2. La classe class-name serve per essere usata in un array i cui elementi sono di tipo class-name.

Possono coesistere anche più constructor. La forma dell’oggetto determina quale constructor adoperare. Esempio class CL

Mostra codice

Le definizioni
CL obj1;
CL obj2(0.0, -1.0)
implicheranno che all'obj1 sarà applicato il constructor senza argomenti, mentre all'obj2 quello con due argomenti.

Elementi di sintassi (segue)

Nel caso della class Studente si ha:
// Constructor

Studente::Studente()
{

strcpy(student_name," ");

}

Questo constructor inizializza il valore di student_name alla stringa vuota senza inizializzare gli altri data member della class.

Si noti che non abbiamo inizializzato l’intera class ma solo il particolare oggetto Studente per il quale il constructor è stato invocato.

Ad esempio quando definiamo
Studente stu;
Solo nell’oggetto stu lo student_name verrà posto uguale alla stringa vuota.

Elementi di sintassi (segue)

// destructor

Una classe può avere un solo destructor il quale non ha argomenti.

Sintassi: destructor
class-name:: ~ class-name()
{

istruzioni

}

Esempio:
// destructor

Studente::~Studente()
{

; // in questo caso non ci sono unità dinamiche da deallocare
}

Elementi di sintassi (segue)

Altre member function DEFINITIONS

Sintassi:

return-type class-name::function-name(formal-arg-list)

Qui si definisce una member function che è stata dichiarata per la classe class-name.

Le regole per determinare il return-type e gli argomenti sono analoghe a quelle usate per le function.
Gli argomenti possono essere passati per valore o per indirizzo.
La differenza con le function consiste nel fatto che una member function può far riferimento a tutte le private member function della classe cui appartiene. Cioè quando una member function è applicata ad un object essa può accedere a tutti i private data member di quell’oggetto.

Elementi di sintassi (segue)

Esempio:

// Function Studente::set_name()
void Studente::set_name(string aName)
{

strcpy(student_name,aName)

}
// end Studente::set_name

Questa member function copia la stringa aName in student_name.
Questa variabile fa riferimento al data member student_name di un oggetto della class Studente.
Esempio

Studente stu;
stu.set_name(“Ugo”);

Dove student_name fa riferimento al data member student_name dell’oggetto stu.

Mostra codice

Elementi di sintassi (segue)

Le variabili prima_prova, seconda_prova, esame_finale, nella definizione di Studente::calcola_media sono data member dell’oggetto della classe Studente a cui la funzione viene applicata.

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion

Fatal error: Call to undefined function federicaDebug() in /usr/local/apache/htdocs/html/footer.php on line 93