Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Satisfactia de a face ce iti place. tutorial, lectii online, solutii simple, exmeple, programe, C++

Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

C


Index » educatie » » informatica » C
Supraincarcarea operatorului pointer


Supraincarcarea operatorului pointer


Supraincarcarea operatorului pointer

Operatorul pointer -> poate fi considerat un operator unar postfix, care se aplica operandului care il precede. Supraincarcarea acestui operator se poate face printr-o functie nestatica membra a clasei, cu acceasi sintaxa ca cea prezentata la inceputul acestei sectiuni. Fie o operatie de selectie membru cu forma generala:

obiect->expresie

unde obiect este o instanta a unei clase oarecare X pentru care s-a supraincarcat operatorul pointer. Evaluarea pentru expresie se executa in functie de tipul de data returnat de functia supraincarcata a clasei X operator ->()astfel:

a)      Daca functia operator->() a unei clase X returneaza un obiect de tipul X, atunci se acceseaza elementul corespunzator (obtinut prin evaluarea expresie) a clasei X.

b)      Daca functia operator->() a unei clase Y returneaza un pointer la o data de un tip oarecare, atunci se aplica operatorul -> predefinit, adica se selecteaza o componenta a obiectului catre care indica pointerul returnat.

n                   Exemplul 6

Fie doua clase X si Y in care se supraincarca in mod deosebit operatorul de pointer: in clasa X functia operator->() returneaza un pointer la tipul X, iar in clasa Y functia operator->()returneaza un pointer la tipul X (deci diferit de tipul Y al clasei respective).

class X

void Display()

friend ifstream& operator>>(ifstream& stream,

X& obX);

};

ifstream& operator>>(ifstream& stream, X& obX)

X* read_from_disk(const char *p)

class Y

X* operator->()

};

void f7()



In acest exemplu implementarea functiei read_from_disk() folosind operatii cu streamuri este mai putin interesanta (ea poate fi inteleasa mai bine dupa prcurgerea operatiilor cu streamuri), ccea ce intereseaza este faptul ca returneaza un pointer la un obiect de tipul X, obiect creat in memoria heap si initializat prin citirea unor date dintr-un fisier de pe disc.

Din acest exemplu se pot observa cele doua modalitati de utilizare a functiei operator->() supraincarcate in cele doua clase X si Y.

Functia operator->() din clasa X returneaza un pointer la X (chiar pointerul this), de aceea poate fi utilizata pentru a accesa o data membra a clasei X. De aceea, operatiile obX->x si obX.x sunt echivalente si mesajele afisate la consola sunt identice, indicand valoarea datei membre x a obiectului obX de tip X.

Functia operator->() din clasa Y returneaza un pointer la X, de aceea poate fi utilizata pentru accesul la o data membra a clasei X, si anume functia Display(). La constructia obiectului obY, sunt initializate datele membre name = test.txt si pX=0. Apelul functiei operator de dereferentiere pentru obiectul obY din clasa Y apeleaza functia read_from_disk() care creaza un obiect de clasa X in memoria heap, il initializeaza cu date citite din fisierul cu numele test.txt, returneaza pointerul la acest obiect creat. Acest pointer este folosit pentru selectarea functiei Display() a obiectului. La consola se afiseaza valoarea numarului intreg citit din fisierul al carui nume este transferat ca argument constructorului obiectului obY (test.txt)

n

Supraincarcarea operatorului pointer este o trasatura puternica a limbajului C++, care permite construirea de programe interesante si flexibile.







Politica de confidentialitate
C


Access
Adobe photoshop
Autocad
Baze de date
C
Calculatoare
Corel draw
Excel
Foxpro
Html
Internet
Java
Linux
Mathcad
Matlab
Outlook
Pascal
Php
Powerpoint
Retele calculatoare
Sql
Windows
Word

Constructorul implicit
EXPRESII SI INSTRUCTIUNI
Supraincarcarea operatorului pointer
SUBIECTE C++
Clase prietene
Supraincarcarea operatorului de indexare
Multiple instante pentru aceeasi clasa
Operatorul de atribuire (=)
Liste inlantuite in C++
Supraincarcarea constructorilor















 
Copyright © 2019 - Toate drepturile rezervate