<<  Chinas Rise and Global Communication: Problems and Prospects CISCO CCIE Program  >>
FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a. 2001-2002 - 4
FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a. 2001-2002 - 4
Strutture
Strutture
Strutture
Strutture
Strutture
Strutture
Strutture
Strutture
Strutture
Strutture
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi
Classi

: Ciclo Strutture e Classi. : utente alenia. : Ciclo Strutture e Classi.ppt. zip-: 43 .

Ciclo Strutture e Classi

Ciclo Strutture e Classi.ppt
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a. 2001-2002 - 4

FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a. 2001-2002 - 4

Ciclo Strutture e Classi

1

2 Strutture

Strutture

Definizione di struttura: Una struttura ? un tipo di dato costituito da un aggregato di dati di altri tipi, detti dati membro della struttura. La definizione di struttura non riserva quindi spazio in memoria. La definizione di una struttura si ottiene nel seguente modo: struct Nome_Struttura { Tipo_Membro_1 Nome_Membro_1; Tipo_Membro_2 Nome_Membro_2; .}; Esempio: struct tipoStruct { int numCode; float dataInfo; };

2

3 Strutture

Strutture

Dati membro di una struttura: I dati membro di una struttura possono essere di qualsiasi tipo ad eccezione di istanze di se stessa. Tra i dati membro di una struttura possono essere inclusi i puntatori alla struttura stessa (strutture autoreferenti). Esempio: struct tipoStruct { int numCode; float dataInfo; tipoStruct *tipoPtr; };

3

4 Strutture

Strutture

Dichiarazione di una struttura: I tipi di dato definiti come strutture possono essere utilizzati per dichiarare variabili, seguendo le regole classiche della dichiarazione delle variabili: in tal caso ogni variabile cos? dichiarata ha la composizione della struttura. Possibili dichiarazioni sono: Nome_Struttura Nome_Variabile_Struttura, Nome_Array_di_Strutture [Dimensione_Array], *Nome_Puntatore_a_Struttura, &Nome_Alias_Struttura= Nome_Variabile_Struttura;

Esempio: tipoStruct varStruct, arrayStruct[10], *structPtr, &aliasVar=varStruct;

4

5 Strutture

Strutture

Accesso ai membri di una struttura: Con loperatore punto: ...Nome_Variabile_Struttura . Nome_Membro Con lalias e loperatore punto: ...Nome_Alias_Struttura . Nome_Membro Con il puntatore e loperatore freccia: Nome_Puntatore_a_Struttura= &Nome_Variabile_Struttura; ..Nome_Puntatore_a_Struttura ->Nome_Membro Con il puntatore e loperatore punto: ..(* Nome_Puntatore_a_Struttura ) . Nome_Membro

5

6 Strutture

Strutture

Esempi di accesso ai membri di una struttura: struct tipoStruct { int numCode; float dataInfo; }; tipoStruct varStruct, arrayStruct[10], *structPtr, &aliasVar=varStruct; int varInt; float varFloat= 10.5; varStruct . numCode= 10; varInt= aliasVar.numCode; varStruct . dataInfo= varFloat; arrayStruct [5] . numCode= varInt; structPtr= &varStruct; varInt= structPtr -> numCode; varInt= (*structPtr).numCode;

6

7 Classi

Classi

Definizione di classe: Una classe ? un tipo di dato costituito da un aggregato di dati di altri tipi e da funzioni, detti rispettivamente dati e funzioni membro. Una classe pu? rappresentare un insieme di oggetti che hanno certi attributi (dati membro) e certi comportamenti (funzioni membro). La definizione di una classe si ottiene nel seguente modo: class Nome_Classe { public: Nome_Classe ( ); //Costruttore // Seguono le implementazioni o i prototipi delle funzioni //e le dichiarazioni dei dati di accesso pubblico . private: // Seguono le implementazioni o i prototipi delle funzioni //e le dichiarazioni dei dati di accesso privato . };

7

8 Classi

Classi

Accesso Pubblico: Le funzioni e i dati definiti con accesso pubblico possono essere acceduti anche dal codice che non fa parte della classe (esterno) Accesso Privato: Le funzioni e i dati definiti con accesso privato possono essere acceduti solo (con qualche eccezione) dalle funzioni membro della classe

Esempio: class Clock { public: Clock ( ); //Costruttore void setTime (int, int, int); void displayTime ( ); void incTime ( ); private: int ora, minuti, secondi; };

8

9 Classi

Classi

Dichiarazione di una variabile classe: I tipi di dato definiti con le classi possono essere utilizzati per dichiarare variabili, seguendo le regole classiche della dichiarazione delle variabili.Una variabile dichiarata utilizzando il tipo definito da una classe prende il nome di instanziazione o oggetto di quella classe. Possibili dichiarazioni sono: Nome_Classe Nome_Oggetto, Nome_Array_di_Oggetti [Dimensione_Array], *Nome_Puntatore_a_Oggetto, &Nome_Alias_Oggetto= Nome_Oggetto; Esempi di instanziazioni di classe: Clock rolex, arrayClock[10], *rolexPtr, &aliasClock=rolex;

9

10 Classi

Classi

Costruttore della classe: E una funzione membro che ha lo stesso nome della classe, non restituisce alcun tipo di dato ed ha il compito di inizializzare i dati membro della classe quando viene dichiarata una variabile del tipo della classe. Il prototipo del costruttore nella definizione di una classe pu? avere degli argomenti, normalmente dichiarati con una lista di tipi di variabili. A questi argomenti possono essere assegnati dei valori di default facendo seguire al tipo di variabile lassegnazione nel seguente modo: , Tipo_Variabile = Valore_di_Default, Comunque agli argomenti, anche se esistono dei valori di default, possono essere assegnati i valori al momento dellinstanziazione delloggetto della classe facendo seguire, al nome delloggetto instanziato, la lista dei valori degli argomenti racchiusa tra parentesi tonde. Se la lista dei valori ? incompleta, deve esserci unassegnazione di default per gli ultimi argomenti.

10

11 Classi

Classi

Esempio: class Clock { public: Clock (int=0, int=0, int=0); //Costruttore void setTime (int, int, int); void displayTime ( ); void incTime ( ); private: int ora, minuti, secondi; }; .. Clock rolex, vetta (5, 3), bulova (5, 3, 2); .

11

12 Classi

Classi

Distruttore della classe: E una funzione che ha lo stesso nome della classe preceduto da tilde (~). Un distruttore ? quindi come segue: ~ Nome_Classe ( ); Il distruttore non accetta argomenti in input e non restituisce dati. Il distruttore effettua le funzioni finali prima che la memoria di un oggetto sia restituita al sistema. Se non c? un distruttore esplicito il sistema ne crea uno di default. Il distruttore viene richiamato quando il programma supera lo scope entro cui ? definito loggetto, a meno che loggetto non sia stato dichiarato static, nel qual caso viene richiamato solo a fine programma main o quando viene chiamata la funzione exit.

12

13 Classi

Classi

Implementazione delle funzioni membro: Le funzioni membro possono avere la loro implementazione allinterno della definizione della classe (considerata come blocco). In questo caso diventano automaticamente inline, ossia il loro codice viene ripetuto tutte le volte che vengono invocate. Le funzioni membro che hanno il prototipo nella definizione di classe e limplementazione allesterno, devono utilizzare loperatore binario di risoluzione dello scope (::). Questo operatore deve essere preceduto dal nome della classe e deve essere seguito dal nome della funzione, ossia: Tipo_Restituito/Void Nome_Classe :: Nome_Funzione () {//Codice di implementazione della funzione }

13

14 Classi

Classi

Esempio: class Clock { public: Clock (int=0, int=0, int=0); //Costruttore void setTime (int, int, int); void displayTime ( ); void incTime ( ); private: int ora, minuti, secondi; }; void Clock :: setTime (int a, int b, int c) {ora= a; minuti= b; secondi= c;} .. Clock rolex, vetta (5, 3), bulova (5, 3, 2); .

14

15 Classi

Classi

Accesso ai membri di una classe: I dati e le funzioni membro (interne o esterne alla definizione) di una classe appartengono quindi allo scope di tale classe. Tutti i membri di una classe sono perci? immediatamente accessibili a tutte le funzioni membro della classe e possono essere riferiti semplicemente con il proprio nome. Laccesso ai membri (pubblici) di una classe dallesterno dello scope di classe (ad es. dal main) si ottiene, una volta che ? stato instanziato un oggetto di quella classe, con gli stessi operatori (. e ->) gi? descritti per le strutture e il nome, il riferimento o il puntatore delloggetto (handle delloggetto).

15

16 Classi

Classi

Accesso (esterno allo scope) ai membri di una classe: Con loperatore punto: ...Nome_Oggetto . Nome_Membro Con lalias e loperatore punto: ...Nome_Alias_Oggetto . Nome_Membro Con il puntatore e loperatore freccia: Nome_Puntatore_a_Oggetto= &Nome_Oggetto; ..Nome_Puntatore_a_Oggetto ->Nome_Membro Con il puntatore e loperatore punto: ..(* Nome_Puntatore_a_Oggetto ) . Nome_Membro

16

17 Classi

Classi

Esempio: class Clock { public: Clock (int=0, int=0, int=0); //Costruttore void setTime (int, int, int); void displayTime ( ); void incTime ( ); int giorno, mese, anno; private: int ora, minuti, secondi; }; Clock :: Clock (int k, int j, int x) {setTime (k, j, x);} . Clock vetta(12, 15, 10), *vediPtr, &copia=vetta; vediPtr= &vetta; int o= vetta.giorno; int m= copia.mese; int s= vediPtr ->anno; s= (*vediPtr). anno;

17

18 Classi

Classi

Esempio: class Clock { public: Clock (int=0, int=0, int=0); //Costruttore void setTime (int, int, int); void displayTime ( ); void incTime ( ); int giorno, mese, anno; private: int ora, minuti, secondi; }; Clock :: Clock (int k, int j, int x) {setTime (k, j, x);} . Clock vetta(12, 15, 10), *vediPtr, &copia=vetta; vediPtr= &vetta; vetta.incTime ( ); vediPtr-> displayTime ( ); (*vediPtr).incTime( );

18

19 Classi

Classi

Ancora sulle funzioni membro Le funzioni membro di una classe possono essere sovrascritte, ma solo da altre funzioni membro della stessa classe. Le funzioni membro hanno scope di funzione in una classe, quindi le variabili definite al loro interno sono note solo alle rispettive funzioni. Se allinterno di una funzione membro ? definita una variabile con lo stesso nome di una variabile con scope di classe questultima ? normalmente mascherata e pu? essere acceduta dallinterno della funzione solo con loperatore binario di risoluzione dello scope (Nome_Classe :: Nome_Variabile). Loperatore unario di risoluzione dello scope serve inoltre ad accedere alle variabili globali.

19

20 Classi

Classi

Separazione di interfaccia ed implementazione:

Crea il file di intestazioni

FileIntestaz.h

#ifndef FILEINTESTAZ_H #define FILEINTESTAZ_H .Definizioni delle classi con prototipi delle funzioni membro.. #endif

Impediscono doppie inclusioni

FileClient.cpp

#include #include FileIntestaz.h . int main ( ) {..instanziazione oggetti e accessi ai suoi membri..}

FileFunzioni.cpp

#include FileIntestaz.h Implementazione delle funzioni membro .

20

21 Classi

Classi

Caso di funzione membro che restituisce un riferimento: Il riferimento restituito da una funzione membro pu? essere relativo ad una qualsiasi delle variabili normalmente accedute dalla funzione, ossia anche relativo ai dati membro della classe. Lutilizzo del riferimento restituito consente di accedere ai dati membro anche dallesterno della funzione (ad es. dal main) e quindi di alterare in modo non corretto (ma consentito!) anche i dati membro privati. Assegnazione tra oggetti: Loperatore di assegnazione = tra due oggetti (della stessa classe!) comporta la copia membro a membro. Un oggetto pu? essere passato come argomento di una funzione ed essere ricevuto in restituzione. Questo si pu? ottenere per valore, per riferimento tramite un puntatore o per riferimento tramite un riferimento.

21

Ciclo Strutture e Classi
http://900igr.net/prezentacija/anglijskij-jazyk/ciclo-strutture-e-classi-124042.html
c
...

661

29
900igr.net > > > Ciclo Strutture e Classi