calcolatori elettronici iii - politecnico di...
Post on 16-Feb-2019
223 Views
Preview:
TRANSCRIPT
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
Politecnico di Torinosede di Alessandria
Calcolatori Elettronici III
ing. Dino Canonicodip. di Automatica e Informatica
telefono: 011 564 7036posta elettronica: di no@pol i t o. i t
Slide 1
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
Indice
Slide 39
1342476568
7273747982868991
105111
Parte I dai linguaggi procedurali al paradigma ad oggettiIntroduzioneLinguaggi proceduraliLinguaggi ad oggettiClassiEreditarietàRidefinizioneClassi virtualiParte II: implementazione C++Implementazione C++Il costrutto classRegole di visibilitàImplementazione dei metodiCostruttori e distruttoriOverloading dei metodiAllocazione statica di oggettiAllcoazione dinamica di oggettiEreditarietà in C++Overloading degli operatori
Slide 2
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
implementazione C++
�
il C++ implementa i meccanismi del paradigma ad oggetti con costrutti appositi
�
le classi descrivono le potenzialità degli oggetti da essi instanziati
�
vengono supportati i meccanismi di
�
ereditarietà (semplice e multipla)
�
data hiding
�
overloading di operatori e funzioni
�
vengono mantenuti inoltre i costrutti e le caratteristiche del linguaggio C
Slide 72
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
il costrutto class...
�
il costrutto class definisce una classe
�
è idealmente simile al costrutto struct del C, con due differenze sostanziali
�
permette di raggruppare in una struttura non solo variabili ma anche funzioni
�
permette di dividere le variabili e li funzioni in pubbliche (visibili ed utilizzabili da elementi esterni alla classe) e private (utilizzabili solo all’ interno della classe)
�
viene scritto all’ interno di un file (generalmente .h), eventualmente insieme al resto del codice
Slide 73
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... il costrutto class...
�
esempio
�
sia data una classe che modelli un semplice contatore, capace di
�
incrementare e decrementare il proprio valore
�
fornire il proprio valore all’esterno
�
se ne scriva l’ implementazione C++
Slide 74
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... il costrutto class...
cl ass count er{
i nt val or e;publ i c:
voi d i ncr ement a ( ) ;voi d decr ement a ( ) ;i nt l eggi ( ) ;
}
dichiarazione del nomedichiarazione componenti private
dichiarazione componenti pubbliche
Slide 75
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... il costrutto class
�
le definizioni delle componenti pubbliche e private seguono la sintassi del costrutto struct
�
l’ insieme delle componenti pubbliche della classe corrisponde all’ interfaccia della classe stessa
�
le componenti private sono invece funzioni e variabili “di servizio”, utilizzabili liberamente all’ interno della classe e quindi da metodi (funzioni) sia pubblici che privati, ma vengono “nascosti” agli utilizzatori terzi della classe
�
questo procedimento si dice data hiding
Slide 76
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
regole di visibilità
�
gli elementi (metodi e membri) di una classe possono essere dichiarati come
�
public: visibili a chi fa uso della classe
�
private: visibili solo alla classe stessa ma invisibili all’esterno
�
i membri possono anche esseer definiti protected: sono visibili alla classe stessa e alle classi che ereditano da essa
�
le variabili comuni mantengono le regole di visibilià del C
Slide 77
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
funzioni friend
�
è possibile definire funzioni che, pur essendo esterne ad una classe, ne possono manipolare i valori privati
�
queste funzioni, pur essendo definite all’ interno dell’ interfaccia della classe non ne fanno parte
�
queste funzioni devono essere definite tramite la keyword friend
�
è possibile definire friend anche intere classi
�
è una metodologia molto usata nel campo dell’overloading degli operatori
Slide 78
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
implementazione dei metodi...
�
dopo aver definito i metodi pubblici e privati occorre scriverne l’ implemetazione
�
i membri vengono implementati separatamente rispetto alla definizione della classe e vi si collegano tramite la dichiarazione <nome_cl asse>: : anteposta al nome del metodo
Slide 79
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... implementazione dei metodi ...
�
si scriva l’ implementazione dei metodi della classe counter
voi d count er : : i ncr ement a ( ){
val or e ++;}voi d count er : : decr ement a ( ){
val or e −−;}i nt count er : : l eggi ( ){
r et ur n val or e;}
Slide 80
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... implementazione dei metodi
�
i metodi vengono implementati all’ interno del listato
�
tutti i metodi (pubblici e privati) possono "maneggiare" le variabili pubbliche e private
�
all’esterno però sono visibili solo i metodi pubblici e le variabili (o membri o attributi) pubbliche
Slide 81
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
costruttori e distruttori...
�
la maniera nella quale vengono create le istanze di una classe non è automatica, ma va specificata in un apposito metodo (o in una apposita serie di metodi) detto costruttore
�
allo stesso modo, alla fine dell’elaborazione, le variabili oggetto allocate devono liberare le risorse impiegate nelle modalità espresse dal distruttore
�
in una classe possono esistere più costruttori, tra i quali chi istanzia l’oggetto (il programmatore) sceglie volta per volta quello che ritiene opportuno, ma un solo distruttore
Slide 82
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... costruttori e distruttori ...
�
il costruttore che non richiede alcun parametro in ingresso è detto costruttore di default
�
il costruttore viene richiamato automaticamente se non si fa una allocazione esplicita
�
discorso è analogo per quanto riguarda il distruttore
�
i costruttori hanno lo stesso nome della classe, il distruttore ha lo stesso nome della classe preceduto dal simbolo tilde
�
costruttori e distruttore non hanno un valore di ritorno
Slide 83
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... costruttori e distruttori
cl ass count er{
. . .
publ i c :count er ( ) ;count er ( i nt ) ;~count er ( ) ;. . .
}
count er : : count er ( ){
pr i nt f ( " cost r ut t or e\ n" ) ;val or e = 0;
}count er : : count er ( i nt i ni t ){
pr i nt f ( " cost r ut t or e a %d\ n" , i ni t ) ;val or e = i ni t ;
}count er : : ~count er ( ){
pr i nt f ( " di st r ut t or e\ n" ) ;}
Slide 84
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
membri statici di una classe
�
un membro statico di una classe è un membro in cui indirizzo è condiviso da tutte le istanze della classe in questione
cl ass count er{st at i c val or e;publ i c :
voi d i ncr ement a ( ) ;voi d decr ement a ( ) ;i nt l eggi ( ) ;
}
i nt count er : : val or e = 0
counter c1
counter c1
counter c1
valore
Slide 85
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
overloading dei metodi...
�
è possibile che una classe abbia più metodi, identici per quanto riguarda nome e tipo del valore di ritorno, ma che accettino in ingresso parametri diversi
�
questo comportamento (detto polimorfismo o overloading dei metodi) aggiunge flessibiltà agli oggetti scritti in C++
Slide 86
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... overloading dei metodi
cl ass count er{
. . .
publ i c :voi d r eset ( ) ;voi d r eset ( i nt ) ;. . .
}
cambiano invecei parametri ingioco
nome e valoredi ritorno noncambiano
Slide 87
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
primo programma completo#i ncl ude <st di o. h>
cl ass count er{
i nt val or e;publ i c:
count er ( ) ;count er ( i nt ) ;~count er ( ) ;voi d i ncr ement a ( ) ;voi d decr ement a ( ) ;i nt l eggi ( ) ;voi d r eset ( ) ;voi d r eset ( i nt ) ;
} ;
count er : : count er ( ){
pr i nt f ( " chi amo i l cost r ut t or e\ n" ) ;val or e = 0;
}
count er : : count er ( i nt val ){
pr i nt f ( " chi amo i l cost r ut t or e a val or e %d\ n" , val ) ;val or e = val ;
}
count er : : ~count er ( ){
pr i nt f ( " chi amo i l di st r ut t or e\ n" ) ;}
Voi d count er : : i ncr ement a ( ){
val or e ++;}
voi d count er : : decr ement a ( ){
val or e −−;}
i nt count er : : l eggi ( ){
r et ur n val or e;}
voi d count er : : r eset ( ){
val or e = 0;}
voi d count er : : r eset ( i nt val ){
val or e = val ;}
file count er . h
Slide 88
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
allocazione statica di oggetti ...
�
come le variabili allocate staticamente nel C gli oggetti possono essere allocati staticamente nel C++
�
i membri e i metodi pubblici sono accessibili con una sintassi simile a quella utilizzata per le strutture
voi d mai n ( ){
count er c1, c2 ( 20) ;. . .c1. i ncr ement a ( ) ;pr i nt f ( " val or e di c2: %d\ n" , c2. l eggi ( ) ) ;
}
Slide 89
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... allocazione statica di oggetti
#i ncl ude <st di o. h>#i ncl ude " count er . h"
voi d mai n ( ){
count er c1, c2 ( 10) ;
c1. i ncr ement a ( ) ;c1. i ncr ement a ( ) ;
pr i nt f ( " c1 val e %d\ n" , c1. l eggi ( ) ) ;
c2. r eset ( 20) ;pr i nt f ( " c2 val e %d\ n" , c2. l eggi ( ) ) ;
}
file myPr ogr am. cpp
di no ~/ docs/ pol i / c3> gcc myPr ogr am. cppdi no ~/ docs/ pol i / c3> . / a. outchi amo i l cost r ut t or echi amo i l cost r ut t or e a val or e 10c1 val e 2c2 val e 20chi amo i l di st r ut t or echi amo i l di st r ut t or edi no ~/ docs/ pol i / c3>_
shell di sistema
Slide 90
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
allocazione dinamica di oggetti...
�
come anche le variabili del C, nel C++ è possibile allocare dinamincamente gli oggetti mediante l’utilizzo di puntatori
�
come nel C è necessario riservare esplicitamente la memoria da utilizzare; a differenza del C non si usa la funzione mal l oc ( i nt ) ma la keyword new, seguita dai parametri del costruttore
�
per deallocare un oggetto non si usa la funzione f r ee ma il costrutto del et e, che invoca il distruttore specifico per la classe
Slide 91
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... allocazione dinamica di oggetti ...
�
anche in questo caso la sintassi è simile a quella usata per le strutture
voi d mai n ( ){
count er * c1, * c2;
c1 = new count er ( ) ;c2 = new count er ( 10) ;
. . .c2−>i ncr ement a ( ) ;pr i nt f ( " val or e di c1: %d\ n" , c1−>l eggi ( ) ) ;. . .
del et e c1;del et e c2;
}
Slide 92
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... allocazione dinamica di oggetti
#i ncl ude <st di o. h>#i ncl ude " count er . h"
voi d mai n ( ){
count er * c1;count er * c2;c1 = new count er ;c2 = new count er ( 10) ;
c1−>i ncr ement a ( ) ;c1−>i ncr ement a ( ) ;
pr i nt f ( " c1 val e %d\ n" , c1−>l eggi ( ) ) ;
c2−>r eset ( 20) ;pr i nt f ( " c2 val e %d\ n" , c2−>l eggi ( ) ) ;del et e c1;del et e c2;
}
file myPr ogr am. cpp
di no ~/ docs/ pol i / c3> gcc myPr ogr am. cppdi no ~/ docs/ pol i / c3> . / a. outchi amo i l cost r ut t or echi amo i l cost r ut t or e a val or e 10c1 val e 2c2 val e 20chi amo i l di st r ut t or echi amo i l di st r ut t or edi no ~/ docs/ pol i / c3>_
shell di sistema
Slide 93
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
creazione per copia
�
normalmente gli oggetti vengono creati mediante l’uso degli appositi costruttori
�
esiste però un meccanismo collaterale detto "creazione per copia" che permette di creare un clone di un oggetto
�
questo si ottiene utilizzando l’oggetto da clonare come parametro del costruttore dell’oggetto da creare
voi d mai n ( ){
count er c1, c2 ( 10) , c3 ( c2) ;. . .
}
Slide 94
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
passaggio di parametri per valore e per riferimento...
�
analogamente al C un oggetto può essere passato per valore o per riferimento: nel primo caso la funzione destinazione elabora una copia dell’oggetto passato, nel secondo ne manipola effettivamente il contenuto
�
valgono le stesse considerazioni fatte a suo tempo per il C (un puntatore passato per valore è come una variabile passata per riferimento...)
Slide 95
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... passaggio di parametri per valore e per riferimento
voi d t est : : aument a ( count er c){
c. i ncr ement a ( ) ;}
voi d t est : : aument a ( count er * c){
c−>i ncr ement a ( ) ;}
voi d mai n ( ){
count er c1, c2 ( 10) ;t est t ;. . .t . aument a ( c1) ;t . aument a ( &c2) ;
}
Slide 96
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
Esercizio ...
�
si implementi in C++ la classe Stringa, che permetta di
�
inizializzare una stringa vuota, oppure di inizializzare una stringa a partire da un array di caratteri
�
conoscere la lunghezza della stringa
�
confrontare la stringa con un array di caratteri dato (uguale/diversa)
�
trasformare i caratteri minuscoli in maiuscoli
�
concatenare la stringa con un’altra data
Slide 97
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... esercizio#i ncl ude <st r i ng. h>#i ncl ude <mal l oc. h>
cl ass St r i nga{ char * val or e; i nt di mensi one;
publ i c: St r i nga ( ) ; St r i nga ( char * ) ; ~St r i nga ( ) ; i nt l unghezza ( ) ; i nt ugual eA ( char * ) ; voi d i nMai uscol o ( ) ; char * l eggi ( ) ; voi d concat ena ( char * ) ;} ;
St r i nga: : St r i nga ( ){ val or e = ( char * ) mal l oc ( 0) ; di mensi one = 0;}
St r i nga: : St r i nga ( char * val ){ val or e = ( char * ) mal l oc ( si zeof ( val ) + 1) ; val or e [ st r l en ( val ) − 1] = ’ \ 0’ ; st r cpy ( val or e, val ) ; di mensi one = st r l en ( val or e) ;}
St r i nga: : ~St r i nga ( ){ f r ee ( val or e) ;}
i nt St r i nga: : l unghezza ( ){ r et ur n di mensi one;}
i nt St r i nga: : ugual eA ( char * val ){ i f ( s t r cmp ( val , val or e) == 0) r et ur n 0; el se r et ur n −1;}
voi d St r i nga: : i nMai uscol o ( ){ f or ( i nt a = 0; a < di mensi one; a ++) i f ( val or e [ a] <= ’ z ’ && val or e [ a] >= ’ a’ )
val or e [ a] = val or e [ a] −’ a’ +’ A’ ;}
char * St r i nga: : l eggi ( ){ r et ur n val or e;}
voi d St r i nga: : concat ena ( char * al t r o){ st r cat ( val or e, al t r o) ; di mensi one = st r l en ( val or e) ;}
Slide 98
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
esercizio
�
si scriva il programma testString che svolga le seguenti operazioni:
�
allocazione statica e dinamica di due oggetti Stringa
�
inizializzazione degli stessi dove necessario
�
manipolazione
�
distruzione dove necessario
Slide 99
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
Esercizio ...
�
si scrivano le classi ritenute necessarie per implementare un sistema di archivio produttori / prodotti / ordini
�
si identifichino i produttori mediante nome e indirizzo
�
si identifichino i prodotti mediante nome
�
si identifichino gli ordini in base a produttore, prodotto ordinato e quntità di quest’ultimo
�
per semplicità si assuma che ogni ordine comprenda un solo prodotto
Slide 100
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... esercizio
pr odot t o
get Nome ( )
pr odut t or e
get Nome ( )get I ndi r i zzo ( )
or di ne
pr odot t opr odut t or equant i t à
Slide 101
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
Esercizio...
�
si scrivano le classi necessarie per implementare un simulatore di pizzeria, comprendente clienti, tavoli, camerieri e forno
�
si assuma per semplicità che non esistano tavoli separati ma un’unica tavolata e che i clienti arrivino singolarmente
�
si prevedano per ogni classe parametri che descrivano il comportamento della classe stessa con il passare del tempo
Slide 102
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
...esercizio ...cl ass t avol o{ i nt n_post i ; i nt n_post i _l i ber i ;publ i c : t avol o ( i nt ) ; ~t avol o ( ) ; voi d occupa ( ) ; voi d r i l asci a ( ) ; i nt get _num_post i _l i ber i ( ) ;}
cl ass cl i ent e{ i nt pr ef er enza; i nt pazi enza_mi nut i ; i nt past o_mi nut i ;publ i c : cl i ent e ( i nt , i nt ) ; ~cl i ent e ( ) ;}
cl ass camer i er e{ t avol o ser v i z i o;publ i c : camer i er e ( t avol o) ; ~camer i er e ( ) ; voi d i nt er r oga_cl i ent e ( c l i ent e) ; voi d passa_or di ne ( f or no) ;}
cl ass f or no{ i nt t empo_pr epar azi one; i nt * coda;publ i c : f or no ( ) ; ~f or no ( ) ; voi d accoda ( i nt ) ; voi d pr epar a ( i nt ) ;}
Slide 103
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
...esercizio
�
classe cliente
�
ogni cliente ha una preferenza sulla pizza da scegliere e questa è codificata con un numero intero.
�
Inoltre ha un determinato "tempo di pasto" che è quello durante il quale occupa un posto di un tavolo
�
classe tavolo
�
un tavolo è caratterizzato dal numero totale di posti e dal numero di quelli liberi
�
classe cameriere
�
ogni cameriere è assegnato ad un tavolo (ipotesi semplicistica)
�
il cameriere può interrogare un cliente sulle sue preferenze e passare l’ordinazione così ad un forno
�
classe forno
�
un forno può accettare una serie di ordinazioni e accodarle in un array
�
è caratterizzato inoltre da un tempo tipico di preparazione
Slide 104
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
ereditarietà in C++...
�
secondo il paradigma ad oggetti, è possibile da una classe generale derivare una classe più particolare, aggiungendo nuovo metodi o ridefinendone alcuni della classe principale
�
la classe derivata eredita dalla classe principale
�
tutti i membri (anche quelli privati)
�
tutti i metodi propri della classe tranne
�
costruttori e distruttori
�
overloading di operatori
Slide 105
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... ereditarietà in C++
�
per definire che una classe ne estende un’altra occorre modificare il costrutto class
�
in particolare occorre definire le regole che indichino quali parti originariamente private sono "raggiungibili" dalle classi derivate e quali no
Slide 106
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
esempio
cl ass scaf f al e{ i nt al t ezza, l ar ghezza; i nt numer o_r i pi ani ;publ i c : scaf f al e ( ) ; ~scaf f al e ( ) ;
voi d set Al t ezza ( i nt ) ; voi d set Lar ghezza ( i nt ) ; voi d set Numer oRi pi ani ( i nt ) ; i nt get Al t ezza ( voi d) ; i nt get Lar ghezza ( voi d) ; i nt get Numer oRi pi ani ( voi d) ;}
cl ass ar madi o : publ i c scaf f al e{ i nt numer o_ant e;publ i c: ar madi o ( ) ; ~ar madi o ( ) ;
voi d set Numer oAnt e ( i nt ) ; i nt get Numer oAnt e ( voi d) ;}
eredita da...
non è il casodi ridefinirei metodi discaf f al e
Slide 107
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
Costruttori nelle classi derivate
�
Se una classe B deriva da una classe A, può essere necessario dover invocare un costruttore specifico della classe A e non quello di default.
�
In questo caso si specifica la chiamata al construttore richiesto direttamente nella definizione del costruttore della classe derivata
�
La chiamata al costruttore della classe A va indicata immediatamente dopo la definizione del costruttore della classe B e va preceduta da un carattere ": "
Slide 108
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
Esempio ...
�
si scriva una classe vei col o che esporti i seguenti metodi:
�
i nt l eggi _num_r uot e ( voi d) ;
�
i nt l eggi _peso ( voi d) ;
�
si scriva una classe auto che aggiunga alla classe veicolo il metodo
�
i nt l eggi _num_post i ( voi d) ;
Slide 109
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... esempiofile vei col o. h
file aut omobi l e. cpp
cl ass vei col o{ i nt num_r uot e; i nt peso;
publ i c:
vei col o ( i nt , i nt ) ; ~vei col o ( ) ;
i nt l eggi _num_r uot e ( voi d) ; i nt l eggi _peso ( voi d) ;} ;
vei col o: : vei col o ( i nt r , i nt p){ num_r uot e = r ; peso = p;}
vei col o: : ~vei col o ( voi d){ r et ur n;}
i nt vei col o: : l eggi _num_r uot e ( voi d){ r et ur n num_r uot e;}
i nt vei col o: : l eggi _peso ( voi d){ r et ur n peso;}
#i ncl ude " vei col o. h"
cl ass aut omobi l e : publ i c vei col o{ i nt num_post i ;publ i c: uut omobi l e ( i nt , i nt , i nt ) ; ~aut omobi l e ( ) ;
i nt l eggi _num_post i ( ) ;} ;
aut omobi l e: : aut omobi l e ( i nt nr uot e, i nt peso, i nt npost i ): vei col o ( nr uot e, peso){ num_post i = npost i ;}
aut omobi l e: : ~aut omobi l e ( ){}
i nt aut omobi l e: : l eggi _num_post i ( ){ r et ur n num_post i ;}
richiesta di un costruttore specifico
Slide 110
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
Overloading degli operatori...
�
è possibile definire il comportamento degli operatori standard del C per compiere operazioni specifiche su particolari oggetti
�
il comportamento di un operatore si definisce come un metodo, con nome dato dall’operatore stesso e preceduto dalla keyword operator
�
generalmente è richiesta la dichiarazione friend dell’operatore per poter maneggiare i dati interni
Slide 111
d. canonico ( di no@pol i t o. i t )
cal col at or i el et t r oni c i I I I
... overloading degli operatori (esempio)
cl ass compl ex{pr i vat e: i nt r eal ; i nt i mag;publ i c: . . . f r i end compl ex oper at or + ( compl ex, compl ex) ; . . .} ;
. . .
compl ex oper at or + ( compl ex a, compl ex b){ compl ex t emp; t emp. r eal = a. r eal + b. r eal ; t emp. i mag = a. i mag + b. i mag; r et ur n t emp;}
Slide 112
top related