Documente Academic
Documente Profesional
Documente Cultură
2.Introducere in C++
2.1. Noi extensii pentru C++ cout, cin si cerr n analogie cu C, C++ defineste driverele standard de intrare si iesire care snt deschise cnd un program este executat. Driverele snt: . cout, analog cu stdout . cin, analog cu stdin . cerr, analog cu stderr. Sintactic, aceste drivere nu snt folosite cu functii: datele snt citite sau scrise prin intermediul operatorilor << si >> : #include <iostream.h> int main() { int ival; char sval[30]; cout << "Introduceti un numar: " << '\n'; cin >> ival; cout << " Si un sir :" << '\n'; cin >> sval; cout << " Numarul este :" << ival << "\n iar sirul este :" << sval << '\n\'; return (0); } Programul citeste un numar si un sir de pe driverul cin (de obicei tastatura) si afiseaza aceste date pe cout (monitor). Putem face urmatoarele observatii: . Driverele snt declarate n headerul iostream.h . Driverele cout, cin si cerr snt de fapt 'obiecte' dintr-o anumita clasa care proceseaza intrarea si iesirea unui program. . Driverul cin citeste datele si copie informatiile n variabile folosind operatorul >> (deplasare dreapta). Vom descrie mai trziu cum pot fi (re)definite actiunile operatorilor n C++, altfel dect actiunea lor implicita. . Operatorii ce manipuleaza cin, cout si cerr (adica >> si << ) manipuleaza n acelasi timp si variabile de diferite tipuri. Actiunea lor depinde n final de tipul datelor. Driverele cin, cout si cerr nu fac parte din gramatica lui C++, asa cum este ea definita de compilatorul ce parseaza fisierul sursa. Definitiile lor apar doar n fisierul header iostream.h. n acelasi timp, se pot folosi si vechile functii printf() si scanf(); e o chestiune de gust. Exista nsa niste avantaje si dezavantaje: . Comparat cu functiile standard C, printf () si scanf (), folosirea operatorilor << si >> mpreuna cu driverele corespunzatoare este mult mai sigura n ceea ce priveste tipul datelor (formatul lor este descris de programator n primul caz si este recunoscut de compilator n cel de-al doilea) . Functiile printf () si scanf (), precum si alte functii ce folosesc formatul explicit, implementeaza n fond un mini-limbaj care este interpretat numai la executie. Din contra, compilatorul C++ cunoaste exact ce actiune de intrare/iesire trebuie sa efectueze. . Folosirea operatorilor << si >> ilustreaza posibilitatile lui C++, nsa nu mbunatatesc lizibilitatea programului. Cuvntul cheie const Cuvntul cheie const apare deseori n programele C++, desi face parte de asemeni si din limbajul C. El exprima faptul ca valoarea unei variabile sau a unui argument nu poate fi modificata. De exemplu: int main() { int const ival = 3; //o constanta int initializata cu 3 ival = 4 ; // asignarea va duce la un mesaj de eroare return (0); } Variabilele declarate const pot fi, n opozitie ca n C, folosite ca specificatori de lungime pentru tablouri, ca n exemplul: int const size = 20; char buf [size]; // tablou de 20 de caractere O alta utilizare a cuvntului cheie const apare n declaratiile pointerilor . n declaratia char const * buf; buf este o variabila pointer, ce pointeaza catre chars. Tot ce se gaseste la adresa pointata de buf nu poate fi schimbat, deoarece chars a fost declarat constant. n schimb, pointerul buf poate fi modificat. Deci atribuirea * buf = 'a' este gresita, n schimb buf++ nu. Chiar si declaratia char const *const buf; este permisa; aici nici pointerul, nici valoarea de la adresa buf nu pot fi schimbate. Regula de baza este deci: tot ce apare chiar nainte de cuvntul cheie const nu poate fi modificat. Referinte n afara de declaratiile normale de variabile, C++ permite ca referintele sa fie declarate ca sinonime ale variabilelor. O referinta catre o variabila este ca un pseudonim: numele variabilei si numele referintei pot fi
3.Clase
n acest capitol vom introduce si vom exemplifica notiunea de clasa. n pasi succesivi vom construi clasa Person ce va putea fi folosita pentru crearea unei baze de date. Definitia acestei clase este: class Person { public: // functiile interfata void setname( char const *n); void setaddress (char const *a); void setphone (char const *p); char const *getname (void); char const *getaddress (void); char const *getphone (void); private: //cmpurile de date char *name; char *address; char *phone; }; Datele snt private, deci pot fi accesate doar de functiile din clasa Person. Aceste functii fie seteaza unui cmp o anumita valoare (set..()), fie inspecteaza datele (get...()). 3.1. Constructori si destructori O clasa n C++ poate contine doua functii speciale care snt implicate n munca interna a clase respective. Ele snt numite constructor si destructor. Constructorul Functia constructor are prin definitie acelasi nume ca si clasa corespunzatoare. Ea nu are o valoare returnata specifica, nici macar void. De exemplu, pentru clasa Person, constructorul este Person::Person (). Sistemul C++ asigura apelul unui constructor pentru o anumita clasa atunci cnd este creat un obiect al acelei clase . Este desigur posibil sa definesti o clasa fara nici un constructor explicit: n acest caz sistemul fie nu face nici un apel, fie apeleaza un constructor fals (ce nu face nimic) n momentul crearii unui obiect. Daca un obiect este o variabila locala ne-statica ntr-o functie, constructorul este apelat n momentul executiei functiei. Daca
Functii membru constante si obiecte constante Cuvntul cheie const este deseori folosit n declaratiile functiilor membru, indicnd faptul ca aceste functii nu pot altera cmpurile de date, ci numai inspecta. Exemplu: class Person { public: .... char const *getname (void) const; char const *getaddress (void) const; char const *getphone (void) const; private: .. ... }; Dupa cum se poate observa, cuvntul const apare dupa lista argumentelor. Regula cuvntului const se aplica si aici: tot ce apare dupa cuvntul cheie nu poate fi alterat sau nu poate altera datele. Aceeasi specificatie trebuie sa apara si n definitia functiilor membru: char const *Person::getname () const { return (name); } O functie membru declarata const nu poate altera nici un cmp al clasei sale. Scopul functiilor const este acela de a permite crearea de obiecte const. Pentru asemenea obiecte pot fi apelate numai functiile ce nu le modifica, deci cele declarate const (cu singura exceptie: constructorul si destructorul, apelati automat). Sa cream un obiect const din clasa Person: Person const me ("Profesor", "Iasi", "146141"); //se face initializarea de catre constructor Instructiunea me.setname ("Student") este deci ilegala. 3.3 Operatorii new si delete Limbajul C++ defineste doi operatori ce snt specifici pentru alocarea si dealocarea de memorie. Ei snt new si delete. Fie, de exemplu, o variabila pointer la un int folosita pentru a pointa catre memoria alocata de new, memorie eliberata mai trziu de operatorul delete: int *ip; ip = new int; . . . delete ip; Fiind operatori, new si delete nu necesita paranteze (ca pentru functiile malloc() si free()). Alocarea si dealocarea tablourilor
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
7.Template
Cele mai moderne compilatoare C++ suporta un 'super-macro-mecanism' care permite programatorului sa defineasca functii sau clase generice. Acestea devin concrete odata ce codul lor este utilizat de entitati reale. Termenul general pentru asemenea functii (clase) este templat-uri. 7.1. Functii template Definitia unei functii template este foarte asemanatoare cu cea a unei functii concrete, cu exceptia faptului ca argumentele functiei snt numite ntr-un mod simbolic. Exemplu:
26
27
28
29
30
31
32
33
34
35
36