Introduzione Le due componenti principali dei programmi



Scaricare 584 b.
Pagina6/9
13.12.2017
Dimensione del file584 b.
1   2   3   4   5   6   7   8   9

Il compito del distruttore è di assicurarsi che l’oggetto per cui è invocato verrà distrutto senza conseguenze. In particolare, se memoria è stata allocata nel costruttore, il distruttore dovrà assicurarsi di restituirla allo heap



Costruttori e distruttori (5)

  • I costruttori con un solo parametro sono automaticamente trattati come operatori di conversione

  • Per evitare la conversione si puo` usare explicit



Classe Vector2D

  • Come usare Vector2D:



Classe Vector2D



Interfaccia e implementazione

  • La struttura interna dei dati (x_, y_) che rappresentano l’oggetto della classe Vector2D sono nascosti (private) agli utilizzatori della classe.

  • Gli utilizzatori non dipendono dalla struttura interna dei dati (come lo erano gli utilizzatori dei common blocks Fortran)

  • Se la struttura interna cambia (es.: r_, phi_), il codice che usa Vector2D non deve essere modificato.



Classe Vector2D

  • Protezione dell’accesso ai dati:

  • I metodi di una classe hanno libero accesso ai dati privati e protetti di quella classe



Selettori e modificatori

  • Selettore: metodo che non modifica lo stato (attributi) della classe. E’ dichiarato const

  • Modificatore: metodo che può modificare lo stato della classe



friend

  • La keyword friend puo` essere usata perche` una funzione (o una classe) abbia libero accesso ai dati privati di un’altra classe



friend (2)

  • friend (nonostante il nome) e` nemico dell’incapsulamento e quindi dell’Object Orientation

  • Un uso eccessivo di friend è quasi sempre sintomo di un cattivo disegno

  • Esistono anche situazioni in cui un friend può essere accettabile

    • Overloading di operatori binari
    • Considerazioni di efficienza
    • Relazione speciale fra due classi


static

  • Attributi dichiarati static in una classe sono condivisi da tutti gli oggetti di quella classe

  • Metodi dichiarati static non possono accedere ad attributo non statici della classe

  • Attiributi statici possono essere usati e modificati soltanto da metodi statici

  • Nonostante l’utilizzo di static sembri imporre condizioni troppo restrittive, esso risulta utile nell’implementazione di:

    • contatori
    • singleton (vedi oltre)


Un contatore



Un singleton

  • Un singleton è una classe di cui, ad ogni momento nel corso del programma, non può esistere più di una copia (istanza)



Operatori

  • E’ possibile ridefinire +, -, *, [], ++, ==, . . .



Operatori (2)

  • Esempio:



Operatori (3)

  • Esempio:



this

  • In una classe è automaticamente definito un attributo particolare: this

    • this è un puntatore all’oggetto di cui fa parte
    • E’ particolarmente utile quando si definisce un operatore di assegnazione (=):


Overloading di operatori

  • possono esistere funzioni con lo stesso nome ma con argomenti diversi

  • Non bisogna pero` esagerare! Ogni operatore deve avere un significato ben preciso, per ragioni di chiarezza.



Overloading di operatori (2)

  • Permette di utilizzare tipi definiti dall’utente come se fossero tipi fondamentali

  • La cardinalita`, l’associativita` e la precedenza di un operatore non possono essere modificati

  • Operatori unari sono implementati come metodi senza argomenti (l’oggetto è l’argomento implicito)

  • Operatori binari possono essere implementati come metodi con un argomento (il primo argomento, implicito, è l’oggetto il cui operatore agisce) o come funzioni friend a due argomenti.



Programmazione generica

  • Il C++ fornisce un metodo per creare un polimorfismo parametrico. E’ possibile utilizzare lo stesso codice per tipi differenti: il tipo della variabile diventa un parametro



Sintassi



1   2   3   4   5   6   7   8   9


©astratto.info 2017
invia messaggio

    Pagina principale