Supraîncărcarea Operatorilor

Curs
9/10 (2 voturi)
Domeniu: Calculatoare
Conține 1 fișier: doc
Pagini : 12 în total
Cuvinte : 4510
Mărime: 23.85KB (arhivat)
Publicat de: Theodor Marginean
Puncte necesare: 0

Extras din curs

3. Modalitati de supraîncarcare a operatorilor.

O functie operator supraîncarcata poate fi introdusa ca functie membra (în general nestatica) sau functie prieten (functie nemembra).

Declararea unei functii membra nestatica specifica urmatoarele:

1) functia poate accesa partea privata a declaratiei clasei

2) functia este în domeniul clasei

3) functia trebuie apelata dintr-un obiect

O functie membra statica satisface numai primele doua conditii, în timp ce o functie prietena a unei clase satisface numai prima conditie.

O functie operator având ca prim argument un tip primitiv nu poate fi functie membru.

Functiile care modifica reprezentarea unui obiect necesita acces la datele membri, deci trebuie sa apartina clasei. Ele sunt functii membrecu argumente referinte neconstante.

Daca se doresc conversii implicite pentru termenii functiei operator, aceasta va fi functie nemembra cu argumente referinte constante. Aceste functii implementeaza operatorii care nu necesita operanzi L-valori (adica se aplica tipurilor fundamentale). Acestia sunt în general operatorii binari. Necesitatea accesului la reprezentare determina definirea lor ca functii prieten.

Operatorii care produc o noua valoare din valorile argumentelor (de exemplu operatorul+) se definesc în afara clasei.

Daca nu sunt necesare conversii de tip, alegerea între functie membru si functie prieten ramâne la latitudinea programatorului.

O functie nemembra foloseste numai argumente explicite, în timp ce o functie membra foloseste argumentul implicit this.

Argumentele clase, transmise prin valoare se copiaza în stiva neeconomic. Se prefera în acest caz argumentele referinte constante.

Daca valoarea întoarsa de functie este o referinta, atunci aceasta nu poate fi o variabila automatica (locala functiei). Ea nu poate fi nici o variabila statica locala, deoarece operatorul poate fi folosit de mai multe ori într-o expresie. Valoarea de întoarcere trebuie sa fie alocata în memoria libera (heap) sau sa fie preluata dintr-un buffer de obiecte statice.

Întoarcerea unei referinte la obiectul modificat se realizeaza prin return *this.

Se cauta minimizarea numarului de functii care au acces la reprezentarea interna a unei clase, prevazându-se functii de acces.

În mod obligatoriu sunt functii membre: constructorii, destructorii, functiile virtuale, etc.

4. Operatori supraîncarcati ca functii prieten.

Operatorii folositi în mod uzual pot fi unari sau binari. Utilizarea unui operator binar sub forma a#b este interpretata ca operator#(a,b)

Asadar, un operator binar va fi reprezentat printr-o functie nemembra cu doua argumente, iar un operator unar, printr-o functie nemembra cu un singur argument.

Argumentele se iau clase sau referinte constante la clase (pentru o preluare economica, asigurând protectia datelor)

Vom exemplifica pentru clasa Cplx:

class Cplx{

double re, im;

public:

Cplx(double x=0, double y=0);

Cplx(const Cplx& z);

//operatori binari

friend Cplx operator+(const Cplx& s, const Cplx& d);

friend Cplx operator-(const Cplx& s, const Cplx& d);

friend Cplx operator*(const Cplx& s, const Cplx& d);

friend Cplx operator/(const Cplx& s, const Cplx& d);

//operatori de comparatie

friend int operator==(const Cplx& s, const Cplx& d);

friend int operator!=(const Cplx& s, const Cplx& d);

//operatori unari

friend Cplx operator-(const Cplx& z);

friend Cplx operator!(const Cplx& z); //conjugat

friend Cplx& operator++(Cplx& z); //prefix

friend Cplx operator—-(Cplx& z,int); //postfix

};

//definitii operatori în afara domeniului clasei

Cplx operator+(const Cplx& s, const Cplx& d){

return Cplx(s.re+d.re,s.im+d.im);

};

Cplx operator-(const Cplx& s, const Cplx& d){

return Cplx(s.re-d.re,s.im-d.im);

};

Preview document

Supraîncărcarea Operatorilor - Pagina 1
Supraîncărcarea Operatorilor - Pagina 2
Supraîncărcarea Operatorilor - Pagina 3
Supraîncărcarea Operatorilor - Pagina 4
Supraîncărcarea Operatorilor - Pagina 5
Supraîncărcarea Operatorilor - Pagina 6
Supraîncărcarea Operatorilor - Pagina 7
Supraîncărcarea Operatorilor - Pagina 8
Supraîncărcarea Operatorilor - Pagina 9
Supraîncărcarea Operatorilor - Pagina 10
Supraîncărcarea Operatorilor - Pagina 11
Supraîncărcarea Operatorilor - Pagina 12

Conținut arhivă zip

  • Supraincarcarea operatorilor.doc

Alții au mai descărcat și

AutoCad

APERTURE - controleazã mãrimea cursorului selector, caracteristic modului object snap. ARC - traseazã un arc de cerc de orice dimensiune. A -...

Biblioteca de Șabloane Standard

Biblioteca de Sabloane Standard (STL) asigura o abstractizare standardizata a datelor prin intermediul containerelor si o abstractizare procedurala...

Clase Derivate

1. Clase derivate. Prin mostenire, atributele unei clase de baza sunt transmise unor clase derivate. Derivarea permite definirea unor clase noi,...

Clase în Java

Clase pentru miniaplicatii Miniaplicatiile constituie extensii ale unei clase deja existente java.applet.Applet. Structura clasei unui applet...

Clase

1. Programare procedurala –Programare orientata pe obiecte. Limbajul C, ca si Pascal, utilizeaza modelul programarii structurate procedurale, care...

Comunicații internet

2.1. Stilurile caracterelor {n sfirsit pagina dvs. contine ceva, chiar daca este vorba numai de un nume. Vom analiza in continuare elementele de...

Crearea unei aplicații independente în Java

Toate aplicatiile Java contin o metoda main(), spre deosebire de miniaplicatii. class FirstApp { public static void main( String argsst) {...

Curs Excel

Deplasarea prin foi Deplasarea dintr-o foaie in alta se face cu clic cu mouse-ul pe eticheta foii dorite. Deplasarea prin celule Va puteti...

Te-ar putea interesa și

Aplicație pentru gestiunea trenurilor

// Aplicatie pentru gestiunea trenurilor // Mostenire: Se defineste clasa de baza Vagon. Clasele VagonMarfa si VagonPersoane mostenesc clasa...

Examen programarea orientată pe obiecte

1. Clase. O definitie “bruta” a clasei ar fi aceea ca este un concept extins al unui tip de date abstract : in loc sa contina numai informatii –...

Ierarhie de Clase într-o Aplicație Consolă

Formulare generală: Realizarea un proiect în care să fie implementată o ierarhie de clase într-o aplicaţie consolă. Vor putea fi create (şi,...

C++

Un prim exemplu de program C++: #include <iostream.h> void main { int a; cout << "Dati un numar\n"; cin >> a; cout << "Ati tastat numarul "...

Introducere în C Sharp

Noţiuni generale Pentru gruparea fişierelor sursă şi a altor resurse utilizate în cadrul aplicaţiei, mediul Visual Studio .Net (VS) utilizează...

Curs Programare C++

Cap 1. Reprezentarea informaţiilor 1.1 Reprezentarea numerelor întregi în sistemul binar Un număr natural se reprezintǎ ca o colecţie de cifre....

Curs C++

Limbajele C si C++ sunt limbaje de programare de nivel înalt. Limbajul C a aparut în anii 1970 si a fost creat de Dennis Ritchie în...

Supraîncărcarea operatorilor și funcțiilor

SUPRAÎNCĂRCAREA OPERATORILOR ŞI FUNCŢIILOR Supraîcărcarea funcţiilor independente şi a funcţiilor membre Aspecte generale şi restricţii pentru...

Ai nevoie de altceva?