http://www.programmiamo.altervista.org/c/oop/o...



Documenti analoghi
Inizializzazione, Assegnamento e Distruzione di Classi

Visibilità dei Membri di una Classe

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Funzioni in C. Violetta Lonati

Modulo 4: Ereditarietà, interfacce e clonazione

Concetto di Funzione e Procedura METODI in Java

Variabili e tipi di dato

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

costruttori e distruttori

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Sottoprogrammi: astrazione procedurale

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Capitolo 2. Operazione di limite

Scuola Digitale. Manuale utente. Copyright 2014, Axios Italia

I puntatori e l allocazione dinamica di memoria

Parola chiave extends

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

4. Un ambiente di sviluppo per Java

Le variabili. Olga Scotti

Gestione della memoria centrale

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Figura 1 Le Icone dei file di Excel con e senza macro.

Programmazione a Oggetti Lezione 10. Ereditarieta

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Esercizi su. Funzioni

MANUALE ESSE3 Gestione Registro delle lezioni

Compito Scritto di Ingegneria del Software. 10 gennaio Parte teorica, punti 14. Tempo a disposizione: 1 ora

Invio SMS. DM Board ICS Invio SMS

Corso di Fondamenti di Informatica

Introduzione alla programmazione in C

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

La struttura dati ad albero binario

GESGOLF SMS ONLINE. Manuale per l utente

Soluzione dell esercizio del 2 Febbraio 2004

1.0 GUIDA PER L UTENTE

Dimensione di uno Spazio vettoriale

Guida iscrizione Community. istruzione.social.marche.it

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

Programmazione in Java Parte I: Fondamenti

SERVIZI CIMITERIALI. OGGETTO: aggiornamento della procedura SERVIZI CIMITERIALI

FtpZone Guida all uso

24 : 3 = 8 con resto 0 26 : 4 = 6 con resto 2

A tal fine il presente documento si compone di tre distinte sezioni:

ISTRUZIONI SULLE OPERAZIONI DI CAMBIO ANNO CONTABILE 2005/2006 LIQUIDAZIONE IVA - STAMPA REGISTRI - CHIUSURA/APERTURA CONTI

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

dall argomento argomento della malloc()

Mon Ami 3000 Multimagazzino Gestione di più magazzini fisici e/o logici

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Il sistema C.R.M. / E.R.M.

INVIO SMS

Capitolo 13: L offerta dell impresa e il surplus del produttore

ESEMPIO 1: eseguire il complemento a 10 di 765

Calcolo del Valore Attuale Netto (VAN)

per scrivere un articolo da prima pagina! per inviare una newsletter Come si crea Comunicazione Anfaa Edizione 4a.2013

4 3 4 = 4 x x x 10 0 aaa

Schede ADI ADP ADEM Prestazioni aggiuntive MMG. - Manuale - Data Solution Provider s.r.l.

Biblioteca di Cervia NOZIONI BASE DI INFORMATICA

Creare un sito Multilingua con Joomla 1.6

Guida alla configurazione della posta elettronica dell Ateneo di Ferrara sui più comuni programmi di posta

CAPITOLO 7 - SCAMBIO DI MESSAGGI

Workland CRM. Workland CRM Rel /11/2013. Attività --> FIX. Magazzino --> NEW. Nessuna --> FIX. Ordini --> FIX

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO XI.2015

SERVIZIO DI MESSAGGISTICA ALL UTENTE. Manuale per l operatore

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

Registratori di Cassa

MANUALE EDICOLA 04.05

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Esercizio: gestione di un conto corrente

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

WEB-RECALL: GESTIONE DEI TICKETS DI ASSISTENZA

4. Operazioni aritmetiche con i numeri binari

Utilizzo della Intranet, forum privati Soci e Staff

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Introduzione a ROOT. 1. Informazioni generali

NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT.

Codifica: dal diagramma a blocchi al linguaggio C++

Cambio esercizio CONTABILE Flusso operativo

EDICOLA MANAGER EM Importer

Guido d uso sito internet Unione Valdera

File, Modifica, Visualizza, Strumenti, Messaggio

5.2.1 RELAZIONI TRA TABELLE Creare una relazione uno-a-uno, uno-a-molti tra tabelle 9

Interesse composto con Mathcad

Manuale d uso per la raccolta: Sicurezza degli impianti di utenza a gas - Postcontatore

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Procedura SMS. Manuale Utente

Formattazione. ü Introduzione

2 - Modifica Annulla Selezione finestra. S.C.S. - survey CAD system FIGURA 2.1

Introduzione a Jeronimo Essentials

ZFIDELITY - ZSE Software & Engineering Pag.1 / 11

Object Oriented Programming

MAGAZZINO FISCALE (agg. alla rel )

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Transcript:

PROGRAMMIAMO Programma per la gestione di un conto corrente C++ - Costruttore e distruttore C++ Home Contatti Supponiamo ora di voler scrivere un programma a menu per la gestione di un conto corrente bancario. Possiamo dunque definire una classe conto così strutturata: class conto ; void aggiornamento(); // aggiorna annualmente il deposito calcolando l'interesse I metodi della classe conto dovrebbero essere abbastanza esplicativi (lasciamo come utile esercizio al lettore la loro scrittura). Una sola precisazione è necessaria a proposito della funzione prelievo, la quale torna 1 se il prelievo è andato a buon fine (cioè se sul conto è presente la somma da prelevare), mentre torna 0 se non è stato possibile effettuare il prelievo (perché sul conto non è disponibile la somma richiesta). Il programma principale, strutturato, come si è detto, a menu potrebbe essere il seguente: int main(int argc, char *argv[]) conto cc; int scelta; double deposito, tasso, somma; cout<<"scegli l'operazione da effettuare:\n"; cout<<"1) assegna somma depositata\n2) assegna tasso di interesse\n"; cout<<"3) visualizza somma depositata\n4) visualizza tasso di interesse\n"; cout<<"5) effettua versamento\n6) effettua prelievo\n7) aggiorna conto\n"; cout<<"scelta? "; cin>> scelta; switch (scelta) 1 di 7 16/12/2014 09:06

case 1: cout<<"somma depositata: "; cin>>deposito; cc.set_deposito(deposito); case 2: cout<<"tasso di interesse: "; cin>>tasso; cc.set_tasso(tasso); case 3: cout<<"somma sul conto: "<<cc.get_deposito()<<"\n"; case 4: cout<<"tasso di interesse: "<<cc.get_tasso()<<"\n"; case 5: cout<<"somma da versare: "; cin>>somma; cc.versamento(somma); case 6: cout<<"somma da prelevare: "; cin>>somma; if (!cc.prelievo(somma)) cout<<"errore: somma non disponibile sul conto.\n"; case 7: cc.aggiornamento(); cout<<"aggiornamento annuale effettuato.\n"; Osserviamo che, affinché il programma funzioni correttamente, è necessario che, prima di eseguire qualsiasi altra operazione, venga depositata una somma iniziale sul conto (con set_deposito) e venga assegnato un valore al tasso di interesse (con set_interesse). In caso contrario le proprietà (i dati) somma_depositata e tasso_interesse non hanno alcun valore e i risultati di ogni altra operazione sono privi di senso. Questo problema si verifica in C ogni qual volta si dichiara una variabile senza inizializzarla: il valore della variabile è indeterminato. Ciò può condurre potenzialmente a gravi errori, dei quali ci si accorge (talvolta) solo al momento dell'esecuzione del programma. Costruttore di classe Le classi prevedono in C++ uno strumento apposito per inizializzare le variabili della classe: il costruttore. Il costruttore (constructor) di una classe non è altro che un metodo speciale con le seguenti proprietà: il costruttore ha sempre lo stesso nome della classe; il costruttore è una funzione senza tipo, nemmeno il tipo "void"; il costruttore viene chiamato automaticamente ogni volta che viene dichiarato un oggetto appartenente a 2 di 7 16/12/2014 09:06

quella certa classe. Vediamo in pratica come potrebbe essere definito il costruttore della classe conto: class conto conto() somma_depositata = 0; tasso_interesse = 0; ; Nell'esempio qui sopra il costruttore è stato definito all'interno della definizione della classe conto. Come per qualsiasi altra funzione, sarebbe stato anche possibile definirlo all'esterno della classe, lasciando nella classe il solo prototipo della funzione, in questo modo: class conto ; conto() ; conto::conto() // Si noti la ripetizione: il primo "conto" indica la classe, il secondo il costruttore somma_depositata = 0; tasso_interesse = 0; 3 di 7 16/12/2014 09:06

Il costruttore, a differenza degli altri metodi, non viene mai chiamato esplicitamente in un programma. Esso viene invece invocato automaticamente al momento della dichiarazione: conto cc; In questo modo non appena viene dichiarato l'oggetto cc, automaticamente vengono azzerate le sue proprietà somma_depositata e tasso_interesse. Si osservi che non sarebbe stato possibile inizializzare tali variabili all'interno della dichiarazione della classe conto, in questo modo: class conto double somma_depositata=0, tasso_interesse=0;... // ERRORE! // Inizializzazioni non consentite! D'altra parte non sarebbe neppure stato possibile inizializzare somma_depositata e tasso_interesse all'inizio del main, dal momento che si tratta di membri private della classe conto, che non possono essere usati dall'esterno. Costruttore con parametri e overloading di costruttori Il costruttore usato nell'esempio precedente è molto semplice, poiché prevede solo la possibilità che i dati vengano inizializzati a zero. Una definizione di costruttore più interessante potrebbe essere la seguente: conto::conto(double som, double dep) somma_depositata = som; tasso_interesse = dep; Questo costruttore ha due parametri, som e dep, che servono per inizializzare con valori a piacere le proprietà della classe. Questo costruttore viene invocato al momento della dichiarazione di un oggetto di tipo conto in questo modo: conto cc(12500, 0.05); //inizializza somma_depositata a 12500 e tasso_interesse a 0.05 Vi è anche la possibilità di definire più costruttori per la stessa classe, in questo modo: class conto conto() ; conto(double, double); 4 di 7 16/12/2014 09:06

; Si noti che in questo modo abbiamo due funzioni con lo stesso nome conto. In C++ è possibile definire due funzioni con lo stesso nome, purché esse differiscano per il numero e/o per il tipo dei parametri (non è invece possibile differenziare due funzioni con lo stesso nome in base al solo valore di ritorno). Il compilatore è in grado di stabilire in base alla chiamata a quale delle funzioni ci si sta riferendo. Questo meccanismo, su cui torneremo nel seguito, viene detto overloading di funzioni. Nel nostro caso, se dichiariamo un oggetto in questo modo: conto cc; viene automaticamente invocato il costruttore senza parametri (quello che inizializza i valori a zero). Invece dichiarando l'oggetto così: conto cc(12500, 0.05); viene invocato il costruttore con parametri. Scrittura compatta di un costruttore Il C++ consente anche di scrivere in modo più compatto il codice di un costruttore, come mette in evidenza il seguente confronto: Scrittura estesa conto::conto() somma_depositata = 0; tasso_interesse = 0; conto::conto(double som, double dep) somma_depositata = som; tasso_interesse = dep; Scrittura compatta conto::conto() : somma_depositata(0), tasso_interesse(0) conto::conto(double som, double dep) : somma_depositata(som), tasso_interesse(dep) L'esempio seguente si riferisce al caso in cui il costruttore venga definito fuori dalla classe (lasciando nella classe solo il prototipo). Volendo invece dichiarare il costruttore all'interno della classe, la scrittura compatta è la seguente: class conto conto() : somma_depositata(0), tasso_interesse(0) conto(double som, double dep) : somma_depositata(som), tasso_interesse(dep) 5 di 7 16/12/2014 09:06

; Distruttore Il C++ permette di definire un altro metodo particolare con funzioni opposte a quelle del costruttore, detto distruttore (destructor). Il distruttore ha lo stesso nome della classe a cui appartiene, preceduto però dal carattere ~ (detto tilde, combinazione di tasti ALT+126 sui PC Windows). Il distruttore di una classe viene invocato automaticamente quando l'oggetto di appartenenza perde visibilità (di solito quando termina il programma) e la memoria occupata dai suoi attributi viene liberata. A differenza del costruttore, il distruttore non trova un largo impiego, tranne nelle classi che gestiscono la memoria dinamicamente: in questi casi il distruttore consente di rilasciare lo spazio di memoria allocato per l'oggetto. Il distruttore non può mai avere né argomenti né valore di ritorno. Per esempio nel caso della nostra classe conto potremmo aggiungere un distruttore ~conto() nel seguente modo: class conto ; conto() ; //costruttore della classe senza parametri conto(double, double); // costruttore con parametri ~conto(); // distruttore conto::~conto() cout<<"oggetto eliminato\n"; Al termine dell'esecuzione del programma sul video compare il messaggio "Oggetto eliminato". 6 di 7 16/12/2014 09:06

precedente - successiva Sito realizzato in base al template offerto da http://www.graphixmania.it Segui @ElePrograMania 7 di 7 16/12/2014 09:06