// sempre “by-reference” int id=100; hbook1_(id, title, ……) // OK!
Dotando main() di una lista di argomenti, è possibile avere accesso ai parametri passati dalla command line: argc è il numero di parametri passati dalla command line (sempre almeno 1, il nome del programma) mentre il vettore di stringhe argv contiene ogni singolo parametro
Parametri del programma (2) Lanciato con il comando il programma produrra` il seguente output: - argc e` : 5
- il nome dell’eseguibile e`/user/andrea/myprogram
- Argomento #1 = questo
- Argomento #2 = e
- Argomento #3 = un
- Argomento #4 = test
-
Organizzazione dei files Normalmente, le dichiarazioni delle interfacce e le specifiche sono separate dall’implementazione - header files (.h o .hh)
- inclusi nei file sorgente utilizzando direttive del precompilatore
- non contengono codice eseguibile (con l’eccezione delle definizioni delle funzioni inline)
- non devono essere inclusi piu` di una volta, per evitare problemi con il linker
Organizzazione dei files (2) - Files sorgente (.C,.cxx,.cpp,.cc)
- contengono l’implementazione di funzioni e metodi
- codice eseguibile
- includono gli header files utilizzando le direttive del preprocessore
- vengono compilati
- Funzioni inline (.icc)
- La definizione di una funzione inline deve essere visibile là dove viene usata.
- Normalmente implementate negli header files o in files separati (con estensione .icc) che devono essere inclusi nel files sorgente che ne facciano uso
Definizione di nuovi tipi (oltre a int, float, double) come: - numeri complessi,
- vettori,
- matrici, . . .
ma anche: - traiettorie,
- superfici,
- elementi di apparati sperimentali,...
Gli oggetti permettono di modellare una problema che rappresenti la realtà
…C++ e Object Orientation Object Orientation implementata in C++ attraverso il concetto di classe: I dati privati (o attributi) di una classe definiscono lo stato dell’oggetto Le funzioni (o metodi) di una classe implementano la risposta ai messaggi
Una classe C++
Classe Vector2D Un esempio: un vettore bidimensionale
Interfaccia e implementazione I metodi pubblici sono gli unici visibili
Costruttori e distruttori Un costruttore è un metodo il cui nome è quello della classe a cui appartiene Lo scopo di un costruttore è quello di costruire oggetti del tipo della classe. Questo implica l’inizializzazione degli attributi e, frequentemente, allocazione di memoria dallo heap Un costruttore la cui lista di argomenti è vuota o composta di argomenti di default viene normalmente chiamato costruttore di default
Costruttori e distruttori (2) Un costruttore del tipo che ha come argomento un riferimento ad un oggetto della stessa classe viene chiamato copy constructor
Il copy constructor viene normalmente utilizzato: - quando un oggetto è inizializzato per assegnazione
- quando un oggetto è passato come argomento ad una funzione
- quando un oggetto è ritornato da una funzione
Se non viene fornito esplicitamente dall’utente, il compilatore ne genererà uno automaticamente
Costruttori e distruttori (3) Gli attributi di una classe possono essere inizializzati nel costruttore per mezzo di una lista di inizializzatori, che precede il corpo della funzione Quando uno degli attributi è esso stesso una classe, il costruttore appropriato viene scelto sulla base dei parametri forniti nell’inizializzazione E` obbligatorio inizializzare gli attributi (non statici) che siano o riferimenti o const
Costruttori e distruttori (4) Il distruttore è un metodo il cui nome è quello della classe a cui appartiene preceduto da una tilde (~) Il distruttore viene chiamato automaticamente quando un oggetto sta per essere distrutto (sia perchè delete è stato invocato sia perchè l’oggetto è finito fuori scope
|