LA NUOVA GERUSALEMME
Qui si costruisce la NUOVA GERUSALEMME grazie al SECONDO TESTIMONE e UNTO, GESU' vi aveva avvisati del mio arrivo ovvero l'arrivo del FIGLIO dell'UOMO, Gesù stesso ha detto che non lo vedete mai più da Giovanni 16,10 "LA GIUSTIZIA" da cui leggiamo ( 10La giustizia sta dalla mia parte, perché torno al Padre e non mi vedrete più.) Lui stesso manda lo Spirito Santo che è il VERO Figlio dell' Uomo . Il vero Figlio dell' Uomo è descritto in Apocalisse 1, 12 ecc.. Io uso la Bibbia Interconfessionale, diversamente cito altri testi. >>> Pace e Bene dal Figlio dell'Uomo <<<
 
Pagina precedente | 1 | Pagina successiva

10) Eredità in dettaglio

Ultimo Aggiornamento: 31/07/2016 11:16
Autore
Vota | Stampa | Notifica email    
OFFLINE
Post: 257
Post: 246
Registrato il: 02/03/2016
Registrato il: 03/03/2016
Sesso: Maschile
31/07/2016 11:16
 
Quota

Usare virtual , portare i parametri dei genitori dentro le classi figlie ecc...
Già abbiamo visto l’ eredità ma siccome è la base della programmazione del C++e non  solo vediamo meglio quello che non abbiamo visto si era detto che una classe derivata , deriva dalla classe base anche la classe derivata , la nuova classe può essere una classe di base per nuove classi derivate la sintassi per creare la nuova classe che eredita dalla classe base è:

class nome_classe_nuova : accesso  nome_classe_base{ corpo della classe };

Ricordiamo che i membri della classe base (o classe padre)  divengono i membri della nuova classe derivata (o classe figlia) l’ accesso che possiamo avere verso la classe  base dipende dal tipo di accesso che abbiamo inserito nella nuova classe esso può essere public protected o private se non viene indicato nulla  a secondo della struttura da cui deriva la nuova classe  prenderà il tipo se è  da struct che rimane pubblica  allora l’ accesso rimane pubblico, invece se  deriva dalla class  che rimane privata rimane privata

Se il tipo d’ accesso alla classe padre o base è public tutti i membri pubblici della classe padre diventeranno pubblici nella classe figlia ugualmente i membri protetti della classe padre rimarrà protetti anche nella classe figlia , invece i membri protetti della classe padre non saranno accessibili  alla classe derivata o figlia vediamo nei dettagli classe base + classe figlia metto il tutto su una riga ora tutto public  :

 class base { int a,b; public: void  imposta (int z,int x) { a= z; b= x;}  void leggi () {cout<<a<<” “<<b<<endl; }};

class figlia : public base {int c ; public : void inp_figlia(int v){ c= v ;} void leggi_figlia(){cout<<c<<endl;} };

  int  main () { figlia og(5) ;  og.imposta(4,1); og.leggi();  og.inp_figlia(); og.leggi_figlia();  cout<< “\n Per uscire premere un tasto + invio ” char zx; cin>>zx;  }

Questo programma su non ha problemi rimane tutto public nonostante  le variabili abc che siano private , ora se impostiamo la classe base  anzi che public inseriamo protect o private ecco che il compilatore in compilazione  da errore perché è impossibile accedere alle funzioni della classe base ,contrariamente se usiamo le variabili a e b anzi che private usiamo protetto e il resto rimane pubblico  il compilatore compila ugualmente 

Ora se nella parte della classe figlia nel primo public : inseriamo protetto o privato  anzi che pubblico il compilatore non compila perché la classe base non è accessibile  , nel secondo public della classe figlia  cambiarlo in protetto e privato ugualmente non vengono lette  le varie funzioni sia della classe base  che della classe figlia pertanto per usare le classi derivate meglio inserire tutto pubblico altrimenti il compilatore da problemi solo le variabili che normalmente sono private possono rimanere tali perché l’ uso è interno alla classe e sono usate solo da tale classe

Se dobbiamo ereditare da più di una classe  la classe figlia sarà impostata  :

class figlia : public base1, public base2, ecc..{  } ;

Ogni volta deve esserci  il tipo di accesso alla classe superiore e ogni classe viene separate da una virgola possiamo ereditare e usare le stesse variabili che sono usate dalle classi base una volta ereditata le classi possiamo utilizzare l’ argomenti e parametri di tutte le funzioni costruttori vediamo come è possibile passare l’ argomenti e parametri una volta inizializzata la nuova classe figlia con lo schema su, ora possiamo richiamare i parametri delle varie classi base con questo formato il nome della classe base 1 è il costruttore e i suoi argomenti o parametri , le varie classi base sono divise da una virgola mentre la nuova classe dalle vecchie classi  si con 2 punti  :

costruttore_derivato ( argomenti-parametri ) : nome_classe_base1 (argomenti-parametri)   nome_classe_base2 (argomenti-parametri)   , ecc…  {corpo della funzione  costruttore derivato}  

  facciamo un esempio ho 2 classi padre e una derivata e uso  questi parametri le classi le sviluppo su una riga e non inserisco i distruttori nelle classi base1 e 2  le variabili d’inizio sono del tipo protected in modo che la classe figlia possa leggerle e usarle dentro la funzione void leggi():


#include <iostream> using namespace std; 

class base1{ protected: int a; public: base1(int z){ a=z; cout<<”base1\n”;}};

class base2{ protected:  int aa; public: base2(int zz){ aa=zz; cout<<”base2\n”;}};

// inizio della classe figlia 

class figlia : public base1, public base2 {

int af ; public:

// passiamo i parametri  b  alle classe base1 , poi passiamo i parametri  c  alla classe base2 il tutto usando i costruttori

figlia (int a,int b, int c) : base1(b), base2(c)  { af=a; cout<<” figlia \n”;}

// qui sotto nella funzione leggi() come si vede abbiamo passato i parametri delle variabili primarie,  nelle classi base1 e  // base2 erano dichiarate protected anzi ché private cosi sono accessibili 

void leggi() {cout<<a<<” “<<aa<<” “<<af <<endl;}  };

 int main () {    figlia  f (12,13,14) ;  f.leggi();  

 cout <<”\n Premere un tasto + invio per uscire: “ ;char zx ; cin>>zx ;}

Quando le classi base sono ereditate come private tutte le funzioni e le variabile di essa sono automaticamente ereditate in private pertanto non si ha più l’ accesso hai membri della classe , noi possiamo riportare in public questi membri privati per fare ciò c’è 2 modi (uno con l’ utilizzo della parola using namespace  che non la vediamo ora) l’ altro modo è usare il campo di scope :: per entrare direttamente dentro un membro di una classe (sia il membro una variabile che una funzione) privata si usa :

classe_base::membro;

un esempio breve dalla classe figlia vogliamo accedere alla variabile int a; :

 class base {public: int a; ecc… };

class figlia : private base {public: base::a;  };

Ora i diritti d’accesso della variabile a sono stati  ripristinati  int a è di nuovo public , ma se era dentro la classe base private certamente non potevamo passarla per public rimane private , rimane con lo stesso tipo di accesso al membro questo tipo di accesso non sono consigliati perché ne va di se per l’ incapsulamento del programmi  che è la base del C++  

Quando si richiama  più classi base che ha sua volta ha richiamato le classi base  capita che molti membri vengono caricati più volte , cosi poi il compilatore non sa più da dove arriva quel tipo di variabile  se è da figlia1 o figlia2 che usa entrambi base allora bisogna spiegargli se usare  la base di figlia1 o la base di figlia2  e questo si usa sempre il risolutore di campo :: specificando se usare l’ una o l’ altra funzione o variabile  di base  oppure meglio quando specifichiamo le classi base nelle classi derivate mettiamo il virtual ecco un esempio con una classe base poi 2 classi figlie e una terza classe derivata dalle 2 classi figlie con la dichiarazione virtual è come se avessimo caricato una sola volta la classe  base pertanto la sua variabile int a; è letta una sola volta   esempio :

Class base {public: int a; ecc…};

class figlia1: virtual public base {public: int b; ecc…};

class figlia2: virtual public base {public: int c; ecc…};

 class  fliglia3 : public figlia1, public figlia2 {public: int d ; ecc..};

 

Ciao grazie da ByMpt-Zorobabele

Testo PDF aggiornato con questo ultimo capitolo  inserito lo trovate :

www.freeforumzone.com/d/11266858/Elenco-figure-dei-comandi-della-programmazione-C-TESTO-PDF/discussi...

 
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 >


www.freeforumzone.com/d/11266858/Elenco-figure-dei-comandi-della-programmazione-C-TESTO-PDF/discussi...


Vota: 15MediaObject1,23161
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi

Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Crea forum gratis, gestisci la tua comunità! Iscriviti a FreeForumZone
FreeForumZone [v.6.1] - Leggendo la pagina si accettano regolamento e privacy
Tutti gli orari sono GMT+01:00. Adesso sono le 00:28. Versione: Stampabile | Mobile
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com