Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

C


Index » educatie » » informatica » C
Functii operator friend


Functii operator friend


Functii operator friend

La supraincarcarea unui operator folosind o functie care nu este membra a clasei este necesar sa fie transmisi toti operanzii necesari, deoarece nu mai exista un obiect al carui pointer (this) sa fie transferat implicit functiei. Din aceasta cauza, functiile operator binar necesita doua argumente de tip clasa sau referinta la clasa, iar functiile operator unar necesita un argument de tip clasa sau referinta la clasa. In cazul operatorilor binari, primul argument transmis este operandul stanga, iar al doilea argument este operandul dreapta.

In exemplul urmator se reiau unele functiile operator ale clasei Point, implementate ca functii friend ale clasei.

n           Exemplul 3

class Point

Point operator+(Point op1, Point op2)

Point operator-(Point op1, Point op2)

Point operator++(Point &p)

Point operator ++(Point &p, int x)

Point operator--(Point &p)

Point operator --(Point &p, int x)

void f2()

n

Referitor la supraincarcarea operatorilor folosind functii nemembre ale clasei se mai pot face cateva observatii.

Daca functia operator nu ar fi declarata functie friend a clasei, ea nu ar avea acces la variabilele protejate ale clasei. Problema s-ar putea rezolva prin adaugarea unor functii publice de citire si scriere ale datelor membre ale clasei respective, care sa fie apelate in functia operator. Dar o astfel de solutie este incomoda, ineficienta si nu aduce nici un avantaj. Se poate evidentia acest aspect daca se incearca o modificare a functiei operator+() a clasei Point astfel:



class Point

double gety()

void setx(double a)

void sety(double b)

Point operator+(Point op1, Point op2)

Se poate observa ca, daca se folosesc functii nemembre ale clasei pentru supraincarcarea operatorilor, atunci este mult mai eficient si mai comod ca acestea sa fie declarate functii friend ale clasei respective.

O alta observatie referitoare la supraincarcarea operatorilor folosind functii friend este aceea ca pentru operatorii care trebuie sa modifice operandul (cum sunt operatorii de incrementare, decrementare, complement, etc) este necesar transmiterea operandului ca parametru prin referinta, ceea ce permite modificarea lui in functia operator. Acest mod de apel se observa la definirea functiilor operator++() si operator--() din Exemplul 2.








Politica de confidentialitate




Copyright © 2023 - Toate drepturile rezervate