06) Allocazione della memoria differenze tra C e C++ capire cosa è la programmazione a oggetti

Full Version   Print   Search   Utenti   Join     Share : FacebookTwitter
JehovaZorobabele
00Wednesday, June 22, 2016 11:23 AM
Nuovi comandi e sistemi per la programmazioni ad oggetti le strutture

L’ allocazione della memoria nei programmi è una cosa importante nel C standard c’era le funzioni malloc (), calloc() , realloc() poi free() mentre qui in C++ ci sono new e delete che come nel C alloca la memoria dinamica la new serve per creare mentre delete cancella la stessa partizione di memoria creata in precedenza con new la sintassi di new è:


new tipo ;


Logicamente il tipo è il tipo di variabile o array che dobbiamo creare possiamo creare int char double ecc.. scrivendo

new unsigned int;



Con la parola chiave delete si rilascia questa memoria che prima abbiamo assegnato con new se si dimentica di de alloccare questa memoria andiamo alla fine con il non aver più memoria a disposizione per il nostro programma, perché più che una piccola variabile parliamo di grossi array quello che veramente mangia la memoria per cancellare questi basta scrivere :


delete [] array;

dove array è il nome del nostro vettore o array una volta eliminata la vecchia allocazione di memoria ora possiamo allocare la nuova memoria per nuovi lavori anche se questa memoria rimane frammentata



Per lavorare al meglio è consigliabile fare diverse funzioni in modo che il lavoro sia svolto in maniera che queste possono lavorare indipendenti, è meglio creare vari file uno per il main.cpp il cuore del programma, questo che va compilato, poi un altro deve essere un file header.h qui vanno inserite tutti i prototipi delle varie funzioni che saranno dichiarate con le strutture o classi e saranno inserite anche le varie variabili che saranno usate dentro queste funzioni , ricordiamo che la differenza tra struct e classe sta che la prima è pubblica mentre la seconda è privata , poi avremo un terzo file sempre .cpp dove sviluppiamo tutte le nostre funzioni che abbiamo dichiarato nel file Header.h questo nuovo file sarà nome.cpp , il compilatore che collega tutta la libreria noi dobbiamo solo collegare il file h al main e all’ ultimo file creato dove rimane tutte le funzioni il file h viene incluso tramite #include"nome.h" e deve essere incluso anche dentro il file dove sono sviluppate le funzioni.


Il C++ vuole che il programma sia sviluppato in più file e che si usi i file header dove dichiarare le funzioni che a sua volta devono essere dichiarate tramiti classi o strutture perché nel C++ entra in gioco la visibilità del progetto, il file header.h deve far parte della libreria in modo che il compilatore per prima cosa va legge e vede cosa deve fare cosa deve allocare, in poche parole il compilatore deve vedere la struttura del programma per capire dove deve essere allocata la memoria e come funziona, prima nel C le funzioni erano chiamate fuori dalla struttura oggi con il C++ possono essere chiamate dentro la struttura senza problemi di sbagliare ora per richiamare le funzioni c’è l’ operatore della visibilità dello scope che è :: cosi possiamo richiamare le funzioni membro che sono all’ interno della struttura o della classe :


struct A{


int a,b,c;


void funz1(int);


int funz2(int l);


};


per richiamare la funzione membro 1 funz1()basta scrivere :


A::funz1()


{corpo della funzione }


In questo modo possiamo inserire diverse strutture o classi con diversi nomi ma al sui interno le stesse funzioni con i stessi nomi tanto il compilatore capisce tramite il nome della struttura di quale funzione membro parliamo B::funz1() , le funzioni globali possiamo sempre metterle all’ inizio del file che contiene il main, ma se usiamo le strutture o classi il compilatore stesso ci chiede il file header .h


Nei nuovi file in C++ la chiamata delle funzioni membro viene per mezzo del ‘.’ Punto contro  nel C si doveva usare la & per poi inserire il nome della variabile o funzione come si usava con scanf , qui con il punto si apre una finestra di scelta


In C++ si parla di oggetto un oggetto è un indirizzo di memoria dove è registrato una variabile o una funzione questi diversi oggetti comunicano tra di loro e normalmente questi oggetti funzioni o variabili sono inseriti dentro le strutture o classi che ha loro volta vanno dichiarate dentro i file header nel C non era obbligatorio ma era consigliato fare cosi, nel C++ è stabilito in partenza di costruire le strutture dentro il file header .h


Un file header secondo la regola del C++ si può scrivere solo le dichiarazioni e questo file va incluso in tutti i file del programma dentro il file dove si sviluppa le funzioni che possono essere diversi e nel file del main che deve essere solo uno


Per le definizioni è possibile dichiarare delle cose quante volte si vuole, ma ci deve essere una sola definizione per ogni cosa dichiarata inoltre non bisogna mai inserire il comando (using namespace) dentro un file header altrimenti si disattiva tutte le direttive della libreria standard e si carica tutto su e si vanifica tutto il lavoro del namespace


Con i File header nasce un problema se su ogni file .cpp (diverso dal main) creato dobbiamo inserire il rispettivo file header dove rimane le dichiarazioni delle funzioni , capita che lo stesso file lo carichiamo su diverse volte e questo quando capita il compilatore da errore cosi per non far creare casini bisogna inserire dei flag di controllo dentro lo stesso file header e questo grazie le direttive del preprocessore all’ inizio di ogni header scriviamo :


#ifndef HEADER_FLAG


#define HEADER_FLAG


Corpo del file


#endif //HEADER_FLAG


Dove header_flag è il nome e l’ estenzione del file che dobbiamo scrivere ecco un esempio per un file che si chiama prova.h:


#ifndef PROVA_H


#define PROVA_H


Struct prova {


int a,b,c;


void prova(int a, double b);


};


#endif //PROVA_H


In questo modo con #ifndef se il compilatore trova già il file header con quel nome caricato , non lo carica per la seconda volta, cosi passa avanti altrimenti carica il nuovo file header


Accesso alle strutture e classi con public private e protector per prima cosa quando si usa uno di questi nomi vanno seguiti da 2 punti private: rende i membri di una struttura publici o privati cosi sono visibili o meno secondo i casi la struct è public mentre classe è private pero possiamo inserire altro modo come ci fa comodo e possiamo passare da uno stato all’ altro più volte dentro la struttura ora vediamo la parola private


Con la definizione private diciamo che questi membri della struttura sono private e nessuno eccetto noi può usarli cosi sono delle variabili o funzioni che rimane nascoste ma nello stesso tempo questi oggetti possono essere solo utilizzati dalle stesse funzioni usate dentro la stessa struttura , altre strutture dello stesso programma non può usare l’ oggetti dichiarati privati. Con la definizione public al contrario di private tutti possono usare l’ oggetti dichiarati public si possono usare anche da altre funzioni che sono descritte in altre strutture (sia esse struct o classe)


Per protector si indica oggetti non private e non public è una mezza via che può usare sia i private che i public si vedrà meglio quando si parla di eredità


Per friend vede e modifica gli oggetti private sia della stessa che non della stessa struttura , un friend può modificare un private ma prima deve essere riconosciuto che può farlo, è come dire quella funzione è un mio amico allora la posso utilizzare, se devo utilizzare una variabile dentro una funzione prima di passarla per friend devo dichiararla prima di dire questa variabile è friend la devo dichiarare E’ possibile costruire delle friend nidificati dove prima bisogna dichiarare la struttura , poi la si dichiara friend ed in fine si definisce la struttura esempio d’uso :


struct Contaminuti {


int a , b;


void inizio();


struct ore;


friend struct ore;


struct ore {


int minuti, secondi, ore ;


… ecc};


Sia la classe che la struttura sono sempre strutture di dati dove si concentra tutto quello che è la struttura del programma cosi se si deve fare qualche modifica o correzione è possibile farlo semplicemente da un unico posto


Le Classi sono nate per lavorare con gli oggetti ma più che altro per rendere privato quelle porzioni di programma che non si deve vedere e rendere un programma criptato e questo il nuovo compilatore può farlo dopo certamente moltissimi miglioramenti sulla ricompilazione dei programmi ecc… la classe parla in un linguaggio nuovo parla degli oggetti ogni funzione ogni variabile è un oggetto che fa già parte di una classe come ad esempio classe animale divisa in classi quadrupedi divisa in classe gatti, cani, cavalli già tutti questi animali hanno delle cose in comune sono quadrupedi sono animali vivono all’ aria aperta e amici dell’ uomo ma non e dentro l’ acqua che certamente una balena non fa parte di questa specie di classe come non fa parte a questa classe un gorilla


Il modo di vedere la nuova struttura rende la programmazione più marcata verso l’oggetto e verso quello che si deve incapsulare dentro le varie scatole in modo che ci sia una interfaccia o collegamento per tutti pubblico e una interfaccia privata nascosta


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

Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa click here
Tutti gli orari sono GMT+01:00. Adesso sono le 9:48 AM.
Copyright © 2000-2021 FFZ srl - www.freeforumzone.com