feed
top
crea forum
cerca
feed
forum
supporto
discussione
cerca
È soltanto un
Pokémon con le armi
o è un qualcosa di più? Vieni a parlarne su
Award & Oscar!
JEHOVA e la NUOVA GERUSALEMME > INIZIO <
Blog libero tutti possono commentare nella zona chiacchiere tutti possono dire la sua , la CHAT è libera tutti possono usarla
Cerca
INDICE Appunti sulla programmazione C++
Accedi
07) Le classi il costruttore e il distruttore eredità
Messaggi
OFF
LINE
JehovaZorobabele
Post: 257
Post: 246
Registrato il: 02/03/2016
Registrato il: 03/03/2016
Sesso: Maschile
0
0
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
costruttore
prende 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 la
struttura struct chiamava i suoi membri tramite il comando
->
ora questa chiamata
viene 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 il
distruttore
vengono creati nell’ area pubblica della classe in modo che possono
essere richiamati :
class
nome {
int
a;
public
:
nome(); // costruttore
~nome() //distruttore
};
Il
distruttore garantisce che all’ uscita della classe tutto sia distrutto (d
istrutto 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 utilizzata
Nel
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 in
circolo 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 con
la 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’ inizio
del 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 { } bisogna
stare attenti alle variabili globali che non devono mai essere denominate come
quelle 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 hanno
un 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 delle
informazioni 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 una
base 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 questo
ultimo 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 i
membri 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 i
membri 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 da
public 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 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
1
5
MediaObject
1,00
10
1
Tag discussione
bympt-zorobabele
eredità cpp
cpp costruttori
distruttori cpp
overloading
classi cpp
oggetti programmazione
programmazione oop
programmazione c-cpp
inline
funzione inline
file header
Registrati
Accedi
INDICE Appunti sulla programmazione C++
Accedi
IL MIO PROFILO
LE MIE DISCUSSIONI
FORUM CHE SEGUI
LA MIA FORUM-CARD
MODIFICA FORUM-CARD
FAQ
TRADUCI
LOGOUT
Accedi
Registrati
FAQ
TRADUCI
Scatta o carica foto
Allega file
Inserisci link da url (card)
Incorpora url (YouTube/Twitter/...)
ACCETTA
RIFIUTA
Anteprima