0% found this document useful (0 votes)
53 views45 pages

Programare Orientata Pe Obiecte: Cursul 2 - Deosebiri Intre C Si C++

The document compares C and C++ in terms of input/output operations, comments, declaration positions, structures and unions, and member functions. Some key differences include: in C++, input/output uses cout, cin and streams instead of printf and scanf; C++ supports both single-line and multi-line comments; in C++, declarations can be placed anywhere before use while in C they must be at the top; C++ supports classes and member functions that can access private members.

Uploaded by

PotoroacăAdrian
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
53 views45 pages

Programare Orientata Pe Obiecte: Cursul 2 - Deosebiri Intre C Si C++

The document compares C and C++ in terms of input/output operations, comments, declaration positions, structures and unions, and member functions. Some key differences include: in C++, input/output uses cout, cin and streams instead of printf and scanf; C++ supports both single-line and multi-line comments; in C++, declarations can be placed anywhere before use while in C they must be at the top; C++ supports classes and member functions that can access private members.

Uploaded by

PotoroacăAdrian
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 45

Programare orientata pe obiecte

Cursul 2 - Deosebiri intre C si C++

1
C2: Deosebiri intre C si C++

0. Introducere
d.p.d.v. al fisierelor

*.c => *.cpp


d.p.d.v. al compilatorului

c cplusplus

Exista medii de dezvoltare care au un compilator unic


pentru programele scrise in C si C++ (Borland C) si
altele care au compilatoare distincte si trebuie
informate pe care sa il foloseasca (Dev-C++)! 2
C2: Deosebiri intre C si C++
1. Operatii de intrare/iesire (citire/scriere) de la/pe consola in C++ :
functiile printf, scanf cout, cin; <<, >> (obiecte si operatori de insertie si extractie)

trebuie inclusa biblioteca: iostream si folosit namespace-ul std

cin >> variabila; // de la obiectul consola (cin) se citeste (>>) valoarea variabilei

cout << variabila; // pe obiectul consola (cout) se afisaza (<<) valoarea variabilei

variabila poate sa fie de orice tip de date de baza sau sir de caractere

Exemple:
int x, a; double b; cout << textul: <<sir;
char sir[20]; cout << \n;

cin >> x; cout << x= << x<<endl;

cin >> a >> b>>sir; cout << a= << a<<endl


<< b= << b;
3
C2: Deosebiri intre C si C++
2. Comentarii
/* citire data */
getdate(&data);
sunet();
in C : cout<<" Azi suntem in:<<data.zi<< <<data.luna<< <<data.an;
/* deschidere fisier
fhandler=fopen("C:\\DATE\\REMEMBER.DAT","a");
fclose(fhandler);*/

int stare_Panel = 0;
in C++ : // butoane (8): Scenariu, Salvare, Configurare, Declansare, Analiza,
// Adnotari, Ajutor, Iesire
// stari (4): Initiala, Declansare, Analiza, Simulare
int StariButoane[4][8] =
{{0,1,1,0,0,0,0,0},{1,1,0,1,0,0,0,0},{0,1,0,1,1,0,0,0},{1,1,1,1,1,1,1,1}};
// int StariButoane[2][3] = {{1,2,3},{4,5,6}};
// = {{0,1,1,0,0,0,0,0},{1,1,0,1,0,0,0,0},{1,1,0,1,0,0,0,0}};

Daca linia este prea lunga si se trece automat pe linia urmatoare si comentariul 4
nu mai are efect => se numesc comentarii de linie!
C2: Deosebiri intre C si C++
3. Pozitia declaratiilor in program
la inceput

in C :
oriunde in program

in C++ :

Dar mereu inainte de a fi folosite!

5
la inceput oriunde in
in C : in C++ : program

#include <cstdlib> #include <cstdlib>


#include <iostream> #include <iostream>
using namespace std; using namespace std;

int x=3; int f(int x)


{
int f(int x) int rezultat=0;
{ rezultat=x*x;
int rezultat=0; int dublu=rezultat*2;
int dublu=0; return dublu;
rezultat=x*x; }
dublu=rezultat*2;
return dublu; int x=3;
}
int main(int argc, char *argv[])
int main(int argc, char *argv[]) {
{ int rez=f(x);
int rez=f(x); cout<<x;
cout<<x; system("PAUSE");
system("PAUSE"); return EXIT_SUCCESS;
return EXIT_SUCCESS; } 6
} Avantaj: se face declararea acolo unde este nevoie de variabila -> readability
oriunde in program
in C++ :
float sum(float *v, int n)
{
float s=0;
for (int i=0; i<n; i++)
s+=v[i];
return s;
}
Atentie la durata de viata (scope) a variabilei respective:

// vizibilitate 1 // vizibilitate 2

float sum(float *v, int n) if(m>23.2)


{ {
float s=0; double dv=-1;//
for (int i=0; i<n; i++) }
s+=v[i]; else
i++; //eroare; variabila nu { //..
return s; //mai exista dv = 3.2; // eroare
} //..
7
}
C2: Deosebiri intre C si C++

4. Structurile si uniunile

C: C++:
typedef struct { struct point {
int x; int x;
int y; int y;
} point; };

Atat structurile cat si uniunile pot fi declarate fara typedef =>


=>sunt tipuri de date recunoscute automat

Campurile sunt implicit publice atat in C cat si in C++

Cum declar o variabila de tip point? Cum fac initializarea, modificarea si afisarea ei? 8
Observatii: Cand se folosesc uniuni se presupune ca, la un moment dat, doar un camp este
folosit -> toate campurile declarate ocupa acelasi spatiu.

Uniunile sunt utile pentru a stoca ceva ce poate sa fie de mai multe tipuri.

O structura are campurile stocate in locatii separate de memorie si toate campurile pot sa fie
folosite in acelasi timp.

union uniune { int a; char b; }; //sizeof(uniune) = max sizeof(tip_camp)


struct structura { int a; char b; }; //sizeof(structura) = suma sizeof(tip_camp)

uniune x;
x.a = 3; // sau x.b = 'c';
// NU pot sa le stochez simultan; valoarea lui x.b s-ar suprascrie in spatiul ocupat de x.a

Cum declar o variabila de tip point cu


structura y; campurile x si y coordonatele punctului?
y.a = 3; Cum fac initializarea, modificarea si 9
afisarea ei? Cum arata in memorie?
y.b = 'c';
C2: Deosebiri intre C si C++
5. Functii ca parti ale unor structuri (functii membre)
#include <cstdlib>
#include <iostream>
using namespace std;

struct point { int main(int argc, char *argv[])


int x; // x, y implicit publice {
int y; //<=>accesibile de oriunde point p={1,2};
//din program p.afisare(); // cout<<p.x<< <<p.y<<endl;
void modificare(int xx,int yy) p.modificare(3,3); // p.x=3;p.y=3;
{ p.afisare();
x=xx;//x si y ale oricarei variabile
y=yy;//de tip point care apeleaza // in momentul apelului, aceste functii primesc
} //aceasta functie // adresa variabilei (p) si au acces la campurile
// acesteia
void afisare()
{ system("PAUSE");
cout<<x<<" "<<y<<endl; return EXIT_SUCCESS;
} }
}; denumite si functii membre sau metode; implicit publice
functiile membre nu cresc dimensiunea tipului de date
acces direct la campurile structurii (chiar daca sunt declarate 10private)
utilitatea acestor functii se va vedea in cazul programarii obiectuale.
#include <cstdlib>
#include <iostream>
using namespace std; int main(int argc, char *argv[])
{
struct point { // point p={1,2}; //nu mai functioneaza
private: int x; //tot ce urmeaza dupa //atribuirea directa de valori pentru x si y
int y; //private nu e vizibil //deoarece nu sunt accesibile din aceasta zona
//decat intre {} //de cod
public: //se schimba vizibilitatea
// functiile vor fi vizibile de oriunde point p;
void modificare(int xx, int yy) p.modificare(1,2);
{ p.afisare();
x=xx;
y=yy; // cout<<p.x<< <<p.y<<endl;//nu mai am
} //acces la x si y

void afisare() p.modificare(3,3);


{
cout<<x<<" "<<y<<endl; // p.x=3;p.y=3; ; //nu mai am acces la x si y
}
} ;//pana aici sunt campurile x si y accesibile p.afisare();
system("PAUSE");
De ce/cand as folosi private? return EXIT_SUCCESS;
11
Ce se intampla daca functiile nu erau} declarate public?
C2: Deosebiri intre C si C++
6. Operatorul de rezolutie ::
Permite accesul la un indicator cu domeniu fisier, dintr-un bloc in care acesta nu e vizibil.
#include <iostream>
using namespace std;

int x=0; // x global


void funct(int val)
{
int x = 0; // x local
::x = val; // ::x referire la variabila globala x acoperita ca
cout<<x; 0 // vizibilitate (shadowed) de cea locala cu acelasi nume
x = ::x;
cout<<x; 4 // aici :: se refera la zona de cod (domeniul) fara
} // nume, imediat in afara functiei funct
int main(int argc, char *argv[])
{
cout<<x; 0
funct(4); De fapt acest operator a fost
cout<<x; 4 introdus pentru alt scop!
system("PAUSE");
return EXIT_SUCCESS;
} 12
//ce se afisaza?
#include <cstdlib>
#include <iostream>
using namespace std; void point::afisare() //functia afisare din
// domeniul fisier cu numele point
struct point { {
private: int x;//altfel ar fi publice cout<<x<<" "<<y<<endl;
int y; }

//definesc functiile (specific nume,


//tip returnat, semnatura) int main(int argc, char *argv[])
public: void modificare(int ,int ); {
void afisare(); point p;
}; p.afisare(); // cout<<p.x<<<<p.y<<endl;
p.modificare(3,3); // p.x=3;p.y=3;
//implementez functiile p.afisare();
void point::modificare(int xx,int yy) system("PAUSE");
{ return EXIT_SUCCESS;
x=xx; }
y=yy;
}
o Cineva a facut definirea stucturii cu campurile si functiile necesare; altcineva
implementarea.
o Se doreste separarea codului in: zona de definitie si cea de implementare efectiva
13 -
astfel e mai usor de implementat, modificat si citit.
C2: Deosebiri intre C si C++
7. Functii inline
Inline are efect doar asupra codului generat de compilator.
La fiecare apel - nu se apeleaza propriu-zis functia ci se substituie apelul cu
codul ei = > executie mai rapida.

inline int max(int a, int b) La cursul 1 am precizat ca:


in C++ : {
- in C++ e descurajata utilizarea
return a>b ? a:b;
directivelor preprocesor; aceasta
}
este alternativa.
// utilizare:
int z = max(x, y); - functia main nu poate fi inline
/**/
int z1 = max(x, y);

in C am intalnit ceva similar:


# define max(A, B) ((A) > (B) ? (A):(B))
Desi similare, apare deosebirea importanta ca directiva preprocesor este substituita in
codul sursa inainte de compilare, iar functia inline se substituie in textul modulului
14
obiect la compilare (depistarea erorilor e mai usoara)
C2: Deosebiri intre C si C++
8. Argumente de functii cu valori implicite

In C++ se pot apela functii cu mai putine argumente decat cele


din declaratie (daca au parametri cu valori implicite).

int f(int k = 0) // prototip pentru functia f


{
return k*k;
}

// utilizare:
cout<<f()<< << f(5); // va afisa 0 (folosind valoarea implicita) si 25
15
void printvect(int *v, int n, char*text = )
{
cout<< text<<endl;
for (int i = 0; i < n; i++)
cout<<v[i]<< ;
}

// utilizare:
printvect(x, nx, vectorul x);
printvect(y, ny);

De evitat situatii sensibile de tipul impartirii la 0.

16
Parametrii impliciti trebuie sa se gaseasca la finalul listei de
parametri!

void funct(int val=0,int x) Eroarea generata de compilator la apelul funct(2,4):


{ default argument missing for parameter 2 of `void

cout<<val<< <<x; funct(int, int)'

Dar?
void funct(int val=0,int x=0)
{
cout<<val<< <<x; La apelul: funct(2) se afisaza: 2 0
! DAR Nu o sa am cum sa apelez implicit parametrul val
}
//se poate apela: funct(2,2); si explicit parametrul x
//sau funct(2); 17
//sau funct();
C2: Deosebiri intre C si C++
9. Supradefinirea functiilor (overload)

In C++ pot exista mai multe functii cu acelasi nume, dar semnatura diferita
in acelasi program (functii supradefinite).
Semnatura functiei = numarul, ordinea si tipul parametrilor

Exemplu (aria unui dreptunghi):

int arie_drept(int lun, int lat) float arie_drept(float lun, float lat)
{ {
return lun*lat; return lun*lat;
} }

18
double arie_drept(double lun, double lat) float arie_drept(float lun)
{ {
return lun*lat; return lun*lun;
} }

// utilizare:
cout<<arie_drept(2, 4);
cout<< arie_drept(2.5, 2.2);
cout<< arie_drept(2.5);

In C++ se pot supradefini chiar si operatori: +, -, ++, --, /, <<, etc.).

Dati exemple de cazuri cand este util sa supradefinim functii!


19
C2: Deosebiri intre C si C++
10. Tipul referinta
Studiu de caz pentru construirea unei functii care interschimba doua variabile:
int a,b; // variabile globale
a) void shimba_1() // functie fara parametri
{
int temp=a;
a = b;
b = temp;
}

// main
a = 3; b = 4;
cout<< a << << b; //3 4
schimba_1();
cout<< a << << b; //4 3

functia interschimba doar valorile unor variabile globale solutie limitata


are o viteza scazuta
20
b1) void schimba_2(int ca, int cb)
{
int temp = ca;
ca = cb;
cb = temp;
}

// main...
int a = 3, b = 4;
cout<< a << << b;
schimba_2(a, b);
cout<< a << << b; // ce rezultat de ce?

// valorile lui a si b nu sunt interschimbate, s-a


lucrat asupra copiilor lor

21
c) cu pointeri:
void schimba_3(int *pa, int *pb)
{
int temp = *pa;
*pa = *pb;
*pb = temp;
}

//main()
int a,b; // variabile locale
a = 3; b = 4;
cout<< a << << b;
schimba_3(&a, &b); //transmit adresele lui a si b
cout<< a << << b; // rezultat? de ce?

codul este functional (varianta clasica)


necesita atentie sporita deoarece erori de editare genereaza erori logice greu de
detectat.
& - operator de referentiere (adresare)
22
* - operatorul de dereferentiere (indirectare)
d) cu referinta:

&x referinta catre o variabila x (un nou tip de date)

Transmiterea parametrilor prin referinta


void schimba_4(int &ra, int &rb)
{ // pass-by-reference
int temp = ra; // nu se mai fac copii ale parametrilor
ra = rb; // se opereaza direct la adresele lor
rb = temp; // la iesirea din functie au valorile modificate
}

// main
int a=3,b=5;
schimba_4(a, b);
cout<<a<< <<b; //5 3

23
Alt exemplu (functie care majoreaza cu o valoare o variabila):

// cu pointer // cu referinta
void majoreaza(int *val) void majoreaza(int &val)
{ {
*val += 5; val += 5;
} }
// main // main
int x = 0; int x = 0;
majoreaza(&x); majoreaza(x);
// adresa lui x e trimisa ca argument // referinta la x e primita ca argument

Nu se face o copie a lui x, ci se


lucreaza direct la adresa acelei
variabile
24
25
tipul referinta este folosit ca parametru formal in semnatura functiilor

o functie nu poate returna un pointer la o variabila locala (de ce?)

tot asa nu poate returna o referinta la o variabila locala;

Exemplu (incorect):
struct cmplx
{
float re, im;
};
cmplx & add(cmplx &c1, cmplx &c2) //de ce vreau sa transmit parametrii prin referinta?
{
cmplx c3;
c3.re = c1.re + c2.re;
c3.im = c1.im + c2.im;
return c3;
}
/* utilizare*/ cmplx a,b; //init cu val 26
cmplx z = add(a, b);
o referinta nu poate exista singura (int &ref) se refera la ceva/cineva-> trebuie
initializata!
EX: int x=3;
int &ref=x;
cout<<ref; //3
cand operatorul & este utilizat impreuna cu o variabila, expresia inseamna
adresa variabilei indicate de referinta;

int &ref; ERROR: `ref' declared as reference but not initialized

OBS: 1. - un pointer (int *pint) poate exista separat si poate fi refolosit


- el e o variabila de sine statatoare
- adresa lui e diferita de adresa unei variabile catre care acesta indica.

2. - o referinta poate fi vazuta ca un alias al unei variabile


- nu poate fi refolosita pentru o alta variabila;

//daca declar si o variabila y si fac atribuirea:


int y=5; ref=y; //pur si simplu se modifica valoarea de la adresa
//unde este stocata variabila x; 27
C2: Deosebiri intre C si C++
11. Cuvantul rezervat const
Primul sens in contextul declararii de constante
In C: #define PI 3.14159//constanta definita

In C++: double const PI = 3.14159;// constanta declarata

Cuvantul const este un modificator de tip declara o constanta de un anumit


tip specificat (int, float, double, tipuri definite de utiliazator etc.)

Modificarea ulterioara a valorii acestor variabile este interzisa.

int const ival = 3; // o constanta de tip int


// initializata cu valoarea 3

ival =4; // atribuire ce duce


28
// la un mesaj de eroare
Al doilea sens parametrii de tip referinta const transmisi intr-o functie :

Ce se intampla?

void sum(const int &xx, int &yy)
{

xx+=yy; ERROR: assignment of read-only reference `xx'


}

int main(int argc, char *argv[])


{
int x=2,y=3;
sum(x,y); De ce nu transmit x prin valoare?
system("PAUSE");
return EXIT_SUCCESS;
}
Functia care primeste argumentul prin referinta constanta e informata ca
nu are voie sa modifice valoarea acestuia, poate doar sa o foloseasca.
29
Asigura protectie la erori logice.
Al treilea sens - functii membre de tip const :

Cuvantul cheie (rezervat) const apare uneori dupa lista de argumente a unor
metode (functii membre).

Este utilizat pentru a specifica faptul ca functia respectiva nu modifica (nu


altereaza) campurile de date ale variabilei de tip structura care o va folosi, ci,
doar le citeste sau utilizeza.

Va fi mai clara necesitatea cand vom ajunge la clase; vor aparea si alte discutii
despre utilizarea si utilitatea lui const.

Exemplu: struct dreptunghi


{
private: // nu este necesar
int lun;
int lat;
public:
int get_lun(void) const
{return lun;}
int get_lat(void) const
{return lat;} 30
};
#include <cstdlib>
#include <iostream> Cineva defineste structura int dreptunghi::get_lat(void) const
using namespace std; dupa anumite specificatii { if (lat<0) return 0;
Si altcineva face
else return lat;
implementarea functiilor
struct dreptunghi }
{
private:
int lun; int main(int argc, char *argv[])
int lat; {
public: dreptunghi p[3];
void modif(int , int ); p[0].modif(10,10);
int get_lun(void) const; cout<<p[0].get_lun();
int get_lat(void) const; system("PAUSE");
}; return EXIT_SUCCESS;
}
void dreptunghi::modif(int l1, int l2)
{
lun=l1; lat=l2;
} Cum aloc spatiu pentru un
vector cu elemente de tip
int dreptunghi::get_lun(void) const dreptunghi?
{
lun++; ERROR: increment of data-member `dreptunghi::lun' in read-only structure
return lun; 31
}
C2: Deosebiri intre C si C++
12. Managementul memoriei - operatorii new si delete:
Utilizati pentru a aloca si elibera spatiul de memorie - dinamic.
new aloca spatiu
delete elibereaza spatiu

new si delete sunt operatori si nu necesita paranteze () ca in cazul functiilor


malloc(), calloc(), realloc() si free()

new returneaza un pointer de tipul cerut (int*,point*, etc) catre o zona de memorie

delete returneaza void


1. Alocarea si eliberarea spatiului pentru pointeri la tipuri de date de baza
int *ip,*ip1;
ip = new int; //se aloca spatiu pentru un intreg ; fara initializare
ip1=new int(3); //se aloca spatiu pentru un intreg ; cu initializare cu valoarea 3
delete ip; ip=NULL;
32
delete ip1; ip1=NULL;
2. Alocarea si eliberarea spatiului pentru tipuri de date definite de utilizator
dreptunghi *dp;
dp = new dreptunghi;//se aloca spatiu pentru un
//element de tip dreptunghi
dp->modific(1,1);
delete dp; dp=NULL;

3. Alocarea si eliberarea spatiului pentru tablouri (cu elemente de orice tip)

int* int_tab;
int_tab = new int[20]; // aloca spatiu pt. 20 de intregi dreptunghi *dr_tab = new dreptunghi[20];
cout<<int_tab[3]; //afisaza al 4-lea element
delete [] int_tab; // elibereaza spatiul de memorie delete [] dr_tab;

Prezenta parantezelor patrate [ ] in alocare (new) necesita prezenta sa


la eliberare (delete).

Lipsa in zona eliberarii a [ ] duce la eliberarea incompleta a memoriei


(doar prima locatie cea care corespunde elementului de pe pozitia 033-este
eliberata).
C2: Deosebiri intre C si C++
13. Tipul nou de date bool

O variabila de tip bool poate lua urmatoarele doua valori :


true (1)
false (0)

bool sw;
if (3<4) sw=true; //sw=1;
else sw=false; //sw=0;
cout<<sw; //afisaza 1

34
Problema 1
Care din urmatoarele functii sunt o supradefinire a functiei:
void f(double t, int y);

1. void f(int t, double y);


Da - ordine diferita a parametrii in semnatura
2. int f(double x, int y);
Nu - acceasi semnatura; tipuri diferite returnate nu elucideaza compilatorul
3. void f(double t, int y=0);
Nu - aceeasi semnatura; se poate face apelul: f(2.0,3)- identic cu cel pt fctia exemplu
4. void f(dreptunghi t, dreptunghi y);
Da - tipuri diferite de parametrii in semnatura
5. void f(double t, int j, int k=0);
Nu- ca la pct 3
6.int f(int t); 35
Da-numar diferit de parametrii
Problema 2
Pot cele 3 functii sa faca parte din acelasi program? De ce?
void funct(dreptunghi val) //pp ca a fost implementata pt var de tip struct dreptunghi
{
cout<<val.lun*val.lat;
}

void funct(int val)


{
cout<<val;
}

void funct(int val, int x=0)


{
cout<<val<<x;
}
NU
Considerati urmatorul apel:

funct(3);

ERROR: call of overloaded `funct(int)' is ambiguous 36


Problema 3
Pot cele 2 functii sa faca parte din acelasi program? De ce?

double square(double d);


double square(double &d);

Se apleaza: square(z);

NU! Argumentul z se potriveste si tipului double si tipului double &d.

DAR:

int f(char *s);


int f(const char *s);

DA! Compilatorul face diferenta intre variabile const si ne-const.

37
Problema 4
1. Creati o stuctura pentru numere complexe (campurile real si imaginar sunt
private) si implementati o functie membra de afisare pentru aceasta stuctura

struct complex
{
private: double re;
double im;
public: void afis() const
{
cout<<re<<"+j*"<<im<<endl;
}
};

2. In main alocati dinamic spatiu pentru un vector de 3 nr. complexe

complex *vect=new complex[3];

3. Parcurgeti-l afisand continutul fiecarui element si apoi eliberati spatiul ocupat.

for (int i=0;i<3;i++)


vect[i].afis(); 38
delete [] vect;
Problema 5
Alocati dinamic o matrice de dimensiune lin x col cu elemente de tip_necunoscut .

tip_necunoascut **mat=new tip_necunoascut *[lin];

for (int i=0;i<lin;i++)

mat[i]=new tip_necunoascut[col];

Parcurgeti si afisati coloana col(considerati ca tip_necunoscut e tip de baza)

for (int i=0;i<lin;i++)


cout<<mat[i][col-1];

Ce se intampla daca nu era un tip de baza?


39
Ce trebuia sa implementam?
Eliberati spatiul ocupat de matrice (unde se gasea?)

for (int i=0;i<lin;i++)

delete [] mat[i];

delete []mat;

Ce se intampla daca incerc dupa eliberare ceva de genul:

cout<<mat[1][1];
//se afisaza ce se gaseste la acea adresa

Cum as putea sa nu mai las loc de astfel posibile surse de erori?

mat=NULL;
40
Problema 6
Ce se afiseaza?
int y=3;
int &x=y;
cout<<x<<" "; 3
cout<<&x<<" "; 0x28ff44
cout<<&y<<" "; 0x28ff44
x=5;
cout<<y<<" "; 5
int z=2;
x=z;
z++;
41
cout<<x; 2
Problema 7 -Tema

1. Realizati o structura pentru tipul de date student caracterizat prin nume si


adresa (ambele de dimensiune variabila) si mediile pentru cei 4 ani de studiu.

2. Implementati functiile membre: initializare(cititi datele de la tastatura),


modificare(adresa), modificare(media_unui_an), modificare(toate campurile);
afisare_date_student().

3. Implementati o functie de ordonare a unui vector de dimensiune oarecare


de studenti in functie de media generala a anilor de studiu. Ce functie ar mai fi
necesara?

*Creati vectorul (alocare dinamica) si afisati-l ordonat in functie de media celor


4 ani.

42
using - cuvantul cheie - se poate folosi ca directiva pentru introducerea in zona de
lucru a unui intreg namespace (grupare de variabile/obiecte si functii):

#include <iostream>
using namespace std;

namespace first {
int x = 5;
int y = 10;
}

namespace second {
double x = 3.1;
double y = 2.7;
}

int main () {
using namespace first;
cout << x << endl;
cout << y << endl;
cout << second::x << endl; //folosind operatorul de rezolutie precizez ca ma refer la
cout << second::y << endl; //variabilele x si y din namespaceul second
system(PAUSE);
return 0; 43
}
using si using namespace - sunt valide doar in blocul in care au fost
mentionate sau in intregul cod daca au fost folosite in maniera globala.
Examplu de utilizare a variabilelor dintr-un namespace si apoi a variabilelor din alt
namespace:

#include <iostream>
using namespace std;
namespace first {
int x = 5;
}
namespace second { //intr-un namespace pot sa fie implementate si functii
double x = 3.1416;
}
int main () {
{
using namespace first;
cout << x << endl; //5
}
{
using namespace second;
cout << x << endl; //3.1416
}
return 0; 44

}
Namespace alias
Putem declara nume alternative pentru namespaceuri existente astfel:

namespace new_name = current_name;

Namespace std
Toate fisierele din biblioteca standard C++ isi au declarate
variabilele/obiectele necesare in namespace-ul std.
De aceea includem biblioteca <iostream> si apoi precizam ca avem
nevoie de obiectele declarate in std (using namespace std), aici fiind
declarate obiectele cin si cout (sau le utilizam astfel std::cin/std::cout).
endl e tot o variabila din std.

45

You might also like