Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica

C


Qdidactic » stiinta & tehnica » informatica » c
Folosirea cuvantului cheie this, supraincarcarea operatorilor, functii cu parametri impliciti, functii prietene, clase prietene



Folosirea cuvantului cheie this, supraincarcarea operatorilor, functii cu parametri impliciti, functii prietene, clase prietene


1. Folosirea cuvantului cheie this


Cuvintul cheie this reprezinta o variabila locala predefinita a oricarei metode

nestatice a unui obiect, variabila ce nu trebuie declarata si care este rareori folosita in

corpul functiei. Aceasta variabila este de tip pointer la o variabila de tipul obiectului

curent si contine adresa obiectului prin care a fost apelata functia. Situatia se prezinta ca si cum metodei i s-ar transmite implicit Œn this adresa instantierii prin care a fost apelata.

Cind se face apelul metodei x.func() this este setat la &x si poate fi folosit in

corpul functiei:




class X


2. Supraincarcarea operatorilor


Limbajul C++ permite ca actiunea operatorilor sa fie redefinita pentru noi tipuri de date. Aceasta supraincarcare a operatorilor se face prin definirea unor functii

speciale (functii ce pot fi sau nu metode ale unui obiect).


class X


int geta( ) ;

int getb() ;

X operator +(X& x)

;



int operator !(X *px)



main()



Daca functia de supraincarcare este membra a unui obiect, atunci ea primeste in mod implicit ca prim parametru obiectul prin intermediul caruia este apelata. Din

aceasta cauza in lista de argumente a functiei operator + din exemplul de mai sus nu este specificat decat un singur argument.

Un operator special este cel de atribuire (=), care se apeleaza ori de cate ori se

intalneste o expresie de tipul a = b sub forma a.operator=(b). Pentru exemplul de mai


sus modul de definire al acestui operator este prezentat mai jos. Acest operator

returneaza o referinta la X pentru a permite atribuiri multiple (a = b = c = d). Explicati

de ce o valoare de retur referinta permite acest lucru!


X& operator = (X& x)


3. Functii cu parametri impliciti



In C++ ultimii parametri ai oricarei functii (membra a unui obiect sau functie

ordinara) pot avea valori implicite. In cazul folosirii acestei facilitati, la apelul functiei

pot lipsi toti parametrii declarati cu valori implicite sau ultimii dintre ei.


int f(int x, int z = 9, float r = 5, char c = 'Y')



char g(int p=2, char t);                        // EROARE!


main()


Aceasta facilitate este foarte utila la definirea constructorilor precum si in cazul unei functii deja definite si apelate in numeroase puncte ale programului, dar a carei functionare trebuie modificata pentru a fi utilizata si in alt context. Pentru aceasta, se adauga la argumentele existente ale functiei un flag care pentru valoarea implicita va conduce la executia vechiului corp al functiei, iar pentru alta/alte valori va conduce la executia functiei modificate. Astfel, apelurile vechi situate in diferite puncte ale aplicatiei nu mai trebuie gasite si modificate.


4. Functii prietene. Clase prietene


Limbajul C++ permite accesul la membrii cu mod de acces private si protected

ai unui obiect si din exteriorul metodelor proprii prin declararea de functii si clase

prietene folosind cuvƒntul cheie friend.


class Point


friend void f(void); // functie prietena

friend class X; // clasa prietena



void f()


class X

// acces la membru privat


Folosirea functiilor prietene in asociere cu operatorii supraincarcati poate ridica probleme de ambiguitate, deoarece un operator poate fi definit ca atat ca metoda cat si ca functie nemembru (eventual prietena).


class X



X operator+(X& x, double d)



void g(X b)


Daca s-ar fi introdus si X operator+(X& x, int n) toate atribuirile ar fi fost

ambigue!



5. Aplicatii


5.1. Implementati o clasa Complex care sa incapsuleze lucrul cu numere complexe. Supraincarcati operatorii +,-,=,= =,! (va returna modulul numarului complex), ~(va realiza afisarea numarului complex)


52. Implementati o clasa String care sa faciliteze lucrul cu siruri de caractere.

Operatori: +, =,= =, ~ (schimba majusculele in minuscule si invers)

Metode: Find (realizazea cautarea unui caracter/subsir intr-un sir), Print (afiseaza sirul), Compare(compara un sir cu un alt sir)

Constructori: vid, cu argumente (un sir de caractere), de copiere



Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright