| | | OFFLINE | | Post: 257 Post: 246 | Registrato il: 02/03/2016 Registrato il: 03/03/2016 | Sesso: Maschile | |
|
29/06/2016 18:04 | |
Costruttori distruttori, classe protette publiche private overloading eredità Con la nuova struttura che è la classe si è desiderato volutamente far fronte hai problemi che il C aveva un esempio il C non prevedeva di riunire tutti i dati in un file header anche se era consigliato oppure una volta usata quella funzione il programma apriva nuove funzioni senza fare della pulizia della vecchia struttura invocata, con il C++ si ha l’ incapsulamento tutti i dati importanti sono inseriti dentro una classe, che costruisce e elimina questi dati vediamo il costruttore La classe stessa invocata tramite il compilatore crea in automatico il costruttore, il costruttoreprende il nome della stessa classe appena creata il costruttore è una funzione normale che non ha nessun tipo di ritorno questa nuova funzione può servire per inizializzare le variabili, quando si chiama un oggetto della classe il compilatore stesso crea in silenziosità la chiamata di scope per quella stessa classe (lo scope come abbiamo visto era :: ora il compilatore chiama la classe e il suo costruttore e crea il ponte tramite il puntatore nascosto this che è una parola riservata dove produce la chiamata di scope come se fosse un normale puntatore , il puntatore dentro lastruttura struct chiamava i suoi membri tramite il comando -> ora questa chiamataviene fatta di nascosto )Il costruttore è come qualsiasi funzione solo che porta il nome della stessa classe ma non ha un valore di ritorno come il distruttore, che per inizio porta la tilde ~ sia il costruttore che ildistruttore vengono creati nell’ area pubblica della classe in modo che possonoessere richiamati :classnome {int a;public:nome(); // costruttore ~nome() //distruttore};Il distruttore garantisce che all’ uscita della classe tutto sia distrutto (distrutto un modo per dire ,viene cancellata la zona utilizzata dalla classe in modo che quella zona usata possa essere riutilizzata) cosi ci appropriamo della memoria utilizzataNel costruttore possiamo inizializzare le nostre variabili e usarla come una normale funzione possiamo anche caricare le funzioni inline che significa se abbiamo funzioni semplici possiamo direttamente sviluppare la nostra funzione dentro la stessa classe esempio:#include<iostream>using namespace std;class somma { int x,y;public:somma(int a, int b ) { x=a ; y=b ;} // costruttore con in più la funzione inline dentro la stessa classe, che inizializza le variabili private x, y in modo da utilizzarle con la funzione (vedi) qui sotto, ugualmente questa funzione è sviluppata inline dentro la stessa classe void vedi () {cout << “a= “ <<a <<” + “<<” b= “<< b <<“ Somma = ” <<a+b <<endl; }; // fine della classe int main () { //inizio programma somma x (9 , 11) ;
// somma che è la classe crea l’ oggetto x e passa i valori al costruttore somma era possibile // scrivere anche somma x = somma(9, 11); normalmente si usa il primo metodo più veloce x.vedi();
//ora nell’ oggetto x. non esiste il nome del costruttore (somma) per questo è stato tutto creato su system(“pause”) ; }Utilizzando le funzioni costruttore con i parametri, logicamente meno funzioni vanno incircolo più efficiente è il programma inoltre utilizzare le funzioni inline e utilizzare i costruttori come funzioni normali è molto comune Ricordiamo che anche new e delete sono costruttore e distruttore dell’ area utilizzata dai puntatori , tanto sia il Puntatore che la Classe o una variabile sono oggetti che devono essere costruiti e distrutti al limite vengono tutti distrutti conla chiusura del programma Con questo nuovo compilatore del C++, è stato eliminato il problema delle variabili, con il compilatore C le variabili locali o automatiche dovevano essere tutte definite all’ iniziodel blocco appena sotto int main (), ora in C++ possiamo e dobbiamo definire le stesse variabili vicino dove le usiamo e possibilmente meglio anche inizializzarle int i=0; cosi siamo sicuri che questa variabile ( int i) non contiene cifre spazzatura dovuta all’ esistenza di altri dati prima di questi poi si può capire meglio la funzionalità delle varie variabili e ci guadagna anche la leggibilità se con il vecchio compilatore abbiamo definito 100 variabili sotto il main vai a trovare quale variabile è la nostra a meta di circa 5000 righe di codice scritto in C , poi ricordiamoci in C++ le variabili posso essere riutilizzate se usciamo da un ciclo di { } bisognastare attenti alle variabili globali che non devono mai essere denominate comequelle automatiche in quel caso si può avere il compilatore in errore non sa cosa prendere la locale int a; oppure la globale int a ; bisogna fare attenzione anche i blocchi annidati tipo if di non usare sempre le stesse variabili con i stessi nomi per uguali variabili , se sono diverse char a; , double a; e int a; il compilatore capisce le differenze anche se tutte si chiama a ma hannoun formato diverso e qui si parla di overloading L’ overloading, risolve un problema perché non fare in modo che quando si crea oggetti (variabili o funzioni) non può essere buono quel nome per tutti i tipi, ovvero se io devo stampare una somma sia in float che in intero la stessa somma anziché chiamarle con un nome differente,ora posso utilizzare la somma float e somma int sempre con lo stesso nome per la stessa funzione deve essere il compilatore che capisce la differenza risolvendo questo problema Stroustrup ha risolto anche un altro problema del C dove è possibile usare una funzione senza prima essere stata dichiarata e molte volte il programma in esecuzione può dare errori , con il C++questo problema è stato risolto con i file header.h che se non ci sono ora il compilatore non compila e da errori come già detto i file header serve per quando si utilizza le strutture (class o struct union ) poi inoltre è possibile che si definisce una funzione void a(int) {} poi quando è dichiarata è un float void a(float); il nuovo compilatore questi errori li segnala mentre il vecchio C non diceva nulla era possibile anche non dichiarare nulla pertanto non faceva confronti come fa il compilatore C++Un altro fattore molto importante del C++ è l’ eredità con l’ eredità è possibile passare delleinformazioni da strutture a strutture infatti questo lavoro incorpora una classe dentro un’ altra classe dello stesso tipo per farlo bisogna scrivere il nome della nuova classe : tipo accesso il nome della vecchia classe { esempio classe nuova “nuovo” e classe vecchia “vecchio” il tipo di accesso bisogna dire che tipo è pubblic o private protected :class nuovo : public vecchio {In questo caso tutti l’ elementi pubblici della vecchia classe base “vecchio” sono pubblici anche qui dentro la nuova classe “nuovo” di solito quando si parla di eredità la vecchia classe viene disegnata come classe base o classe genitore ancora superclasse mentre la nuova si chiama classe derivata o classe figlia ancora sottoclasse, quest’ultima classe può essere anche lei unabase per una nuova classe ora vediamo i vari sistemi d’uso dei tipi d’accesso Se su una struttura derivata non viene inserito il tipo d’ accesso sarà considerato quello modello secondo la struttura se è una classe è private se è una struct sarà “public :” con questoultimo modello tutti i membri pubblici della struttura base o genitore diventeranno membri pubblici della struttura derivata o figlia , mentre tutti i membri protetti “protected :” della classe genitore diventeranno membri protetti anche nella classe figlia, inoltre per imembri privati “private :”della struttura padre rimarranno privati e non saranno accessibile dalla classe figlia e quando nella struttura viene indicata con un entrata per private tutti imembri pubblici , privati e protetti non saranno accessibili dentro la struttura padre pertanto il compilatore da errore sottolineando in rosso le funzioni chiamate ma protette mentre nella struttura figlia i componenti public possono essere usati Con la nuova parola riservata protected indica una eredità diversa da private e dapublic se in una struttura viene dichiarato protetto , i membri di questa struttura saranno accessibili solo da membri che fanno parte della stessa struttura i membri protetti possono accedere ai membri privati. Se la classe padre è ereditata come pubblic i stessi membri protected di qui saranno protetti anche nella classe figlia e pertanto sono raggiungibili anche dalla sottoclasse in sintesi con protected possiamo ereditare e trattare tutti i dati sia essi protetti che privati logicamente i dati privati vengono richiamati tramite le funzioni pubbliche altrimenti sono inaccessibili poi vedremo meglio tutte queste cose una classe figlia può ereditare da più classi padre vedremo …. 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 poterscaricare tutto il mio materiale è da utilizzare come desiderate per il testo PDF vedi cartelladedicata , 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
|