Typedef, strutture, unioni, puntatori , enumerato,
Nel scorso capitolo abbiamo visto i tipi di dati primitivi e non solo le nuove costanti, il comando extern e static ecc… ora vediamo i nuovi tipi di dati che si usavano anche in C ma qui ci
apre la strada verso le classi del C++ in C questi dati li abbiamo visti solo di sfuggita perché è importante capire il C++
Il primo passo è creare dei dati tipi definiti come già visto in C abbiamo la parola chiave typedef con typedef è possibile dare un nome-soprannome a quel tipo di variabile la sua sintassi:
typedef tipo soprannome ;
Dove il tipo è il tipo di variabile da usare int, long ecc.. il soprannome il nuovo nome della variabile esempio :
typedef unsigned long ulong ;
ora se io devo costruire delle nuove variabile di tipo unsegned long basta scrivere
ulong var1, var2 ;
ora queste 2 variabili var1 e var2 sono del tipo ulong , ovvero sono definite uguale tipo come è
definito ulong da typedef unsigned long
Il typedef torna utile con i puntatori se io scrivo int * px, pk; siamo sicuri che sia px che pk siano entrambi puntatori ? sicuramente px lo è, ma se avessimo scritto typedef int * intPt ; poi usato
intPt px,pk ;
ora entrambi sono dichiarati puntatori come intPt del typedef dichiarato in precedenza
Il comando typedef è importante per l’ utilizzo delle strutture in C , le strutture sono i record dei dati dove possiamo racchiudere diversi tipi di variabili in modo da costruire dei veri campi tipo : nome, cognome, età, via, ecc… oppure nome prodotto, marca, prezzo, iva (tv satellitare terrestre 26 pollici , sony, 600 , 20% ) rivediamo la struttura da più vicino composta da sopra al main pertanto nella parte dove si indica i prototipi delle funzioni , o dove si inserisce le variabili e costanti globali abbiamo ;
struct nome {
tipo nome1;
tipo nome2;
tipo nome3;
}; vanno sempre i punti e virgola
sotto al main () vanno inserite l’ istanze che possono essere uno o più { struct nome riferimenti esempio il corpo della struttura va messo affilato uno sotto l’ altro fino al terminatore }; io ora lo metto in una riga per comodità di spazio :
struct articoli { char nprodotto[25]; char marca [15]; float prezzo ; };
int main () {
struct articoli at; >>>>ISTANZA
struct articoli ecco qui sopra le istanze dove articoli prende il nome at
ora usiamo il ‘.’ Per richiamare le voci nprodotto , marca, prezzo usando il nome di
richiamo at :
at . prezzo = 600;
il nome di richiamo dette anche istanze possono essere anche più di una :
struct articoli at1, at2 ; >>>ISTANZA
le 2 istanze at1 e at2 richiama i stessi tipi di variabili ma sono completamente diverse e non collegate ma disgiunte la parola struct con il C++ non serve più pertanto possiamo dichiarare le istanze con articoli at1, at2 ;
Con la struct possiamo usare il typedef che la struttura cambierà in
typedef struct {
tipo nome1 ;
tipo
ecc…
} nome;
Ora come vedete il nome della struttura non va più sopra ma qui alla fine dopo l’ ultima graffa sempre con il punto e virgola; tutto il resto rimane come detto su, ora però le variabili interne sono diventate dei tipi predefiniti con la funzionalità della struttura possiamo usare la struttura nei due modi struct semplice oppure con il typedef struct
Nelle strutture possiamo utilizzare i puntatori che sono dichiarati dopo le istanze dopo articoli
at1 at2; scriviamo :
articoli * PUat = &at1; >>>ISTANZA PUNTATORE
Ora PUat è il puntatore di at1 ora invece di usare il punto ‘.’ per scrivere e leggere i membri nella struttura dobbiamo usare -> :
PUat->prezzo = 600 ;
ora se noi facciamo puntare PUat verso at2 con PUat =&at2; ora questi membri di at2 sono
identici ad at1 perché utilizzano la stessa posizione del disco fisso ma possiamo utilizzare un diverso puntatore che punta ad una diversa istanza
articoli at1 , at2 ;>>> ISTANZA
Pat1=&at1 ; Pat2=&at2 ; >>> ISTANZA DEL PUNTATORE CHE LEGGE l’ISTANZA
ora Pat1 e Pat2 sono 2 puntatori che punta verso 2 diverse istanze at1 e at2 possiamo usarle :
Pa1->prezzo = 250; Pa2->prezzo = 600;
La differenza tra le strutture e le classi è che la prima sono pubbliche le seconde sono private
Le Enumerazioni con enum assegna dei numeri interi alle parole , i numeri anche qui parte da 0 in su , se sostituiamo il primo numero , allora la conta parte da li dove diciamo noi, possiamo anche numerare noi diversamente sfalsando i numeri sempre in più avanti enum la sua
sintassi è come la struttura :
enum nome {
nome1,
nome2,
nome3 = 50
};
Allora ora il nome1 prende il numero 0 , il nome2 prende il numero 1 ecc… per sostituire i numeri fare come nel nome3 dopo il prossimo nome4 sarà 51 ecc…
possiamo anche numerare il primo nome con nome1= 1, la virgola fa parte dell’ enum solo nell’
ultimo nome non serve la virgola
Un uso di enum potrebbe essere con lo switch-case un esempio uso della settimana l’enum lo inserisco su una riga
enum settimana { lun =1, mar, mer,gio,ven,sab,dom};
switch
settimana {
case 1:
cout << “lunedi lavoro casa , scuola”; break;
case 2:
cout <<” martedi non lavoro , supermercato , scuola “; break;
ecc…
default : cout << “ errore numero immesso non valido “; break; }
Al posto di enum si vedrà meglio le classi perché qui in C++ non è più possibile sommare come si faceva in C se dall’ esempio precedente lun = 1, si faceva lun++ oppure settimana ++ il C capiva di sommare lun++ = mar
Unione con union si usa la stessa memoria in una unica struttura, union è uguale alla struttura
una parte sopra il main
Union nome{
Tipo nome1;
Tipo nome2;
ecc…
};
Il compilatore assegna la giusta memoria all’ union ma scrive più dati sopra uno stesso spazio di memoria ..la seconda parte di union va inserita sotto il main come sempre, si usa sempre il punto ‘.’ per scrivere o leggere nei membri di union :
main () {
nome x; >>>>ISTANZA
x.nome1= 1250;
cout<< “valore di nome1 = “ <<x.nome1<<endl;
Sia nella struttura struct o typedef struct che in union possiamo creare il nostro array o vettore usando le istanze di questi, sia che sono normali o che sia i puntatori , l’ istanza ricordiamo è il
cambio del nome della struct o union che va sotto il main dove possiamo scrivere :
nome x[5];
ora x è un vettore da 5 unita e possiamo usare tutte le caratteristiche del membro della struttura o unione , il membro è i tipi dati scritti dentro la struttura (tipo nome1)
Ciao grazie da ByMpt-Zorobabele
Testo PDF aggiornato con questo ultimo capitolo inserito lo trovate :
http://www.freeforumzone.com/d/11266858/Elenco-figure-dei-comandi-della-programmazione-C-TESTO-PDF/discussione.aspx
Anche qui di queste discussioni che inserisco faccio un testo PDF da poter scaricare tutto il mio materiale è da utilizzare come desiderate per il testo PDF vedi cartella dedicata , ogni volta cambia ubicazione del testo allora cambio il file e il testo lo inserisco dentro la cartella < file aggiornato ad oggi >
http://www.freeforumzone.com/d/11266858/Elenco-figure-dei-comandi-della-programmazione-C-TESTO-PDF/discussione.aspx