Documente Academic
Documente Profesional
Documente Cultură
FUNCII PRIETENE
CURS 4 PROGRAMARE II
CURS ANTERIOR
Clase Specificatori de acces Contructorii Destructorii Constructor de copiere
CUPRINS
Cuvntul cheie this Funcii prietene
Membri statici
Relaii ntre clase Asociere Agregare Compoziie Motenire
Rezolvarea ambiguitilor
class DataCalendaristica { int luna; }; void DataCalendaristica::setLuna( int luna) { this->luna = luna; }
FUNCII PRIETENE
Funcie prieten Funcie care are acces la membri non-publici ai unei clase Prefixate de cuvntul cheie friend Prototipul este specificat n definiia clasei Este definit n afara domeniului clasei
Sinatax
class X { friend tipReturn numeFunctie( ); }; tipReturn numeFunctie( ){ }
Prototip
Definiie
Apel
Modul(c) ?
Complex c(6,7); c.modul();
Apel
Complex c(6,7); modul(c);
Apel
Complex c(6,7); Modul(c);
CLASE PRIETENE
Accesul este unidirecionat Daca B este un cu A, B poate accesa membri non-publici a lui A, dar A nu poate accesa B
class ArboreBinar; class Nod { private: int data; int key; . friend class ArboreBinar; }; class ArboreBinar { private: Node *root; public: int findKey(int); }; int ArboreBinar::fiind(int val) { if (val == root->key) { return root->data; } //restul cautarii }
FUNCII/CLASE PRIETENE
Utilitate Ofer un acces mai eficient la membri dect n cazul apelului de funcii Suprancrcarea operatorilor un acces mai uor la datele private Funciile/clasele prietene au acces la toi membri clasei, ceea ce violeaz ncapsularea datelor atenie la utilizare Funciile/clasele membre pot modifica starea unei clase. Recomandare: folosirea funciilor membre pentru a modifica date
MEMBRI STATICI
Date/funcii prefixate cu specificatorul static Datele statice exist ntr-o singur copie comun tuturor obiectelor Funciile statice realizeaz operaii care nu sunt asociate obiectelor individuale, ci ntregii clase Accesare Indicarea numelui clasei i folosirea operatorului de rezoluie (X::fctStatica();) Specificnd obiectul clasei i folosind operatorii de selecie (X x: x.fctStatica();)
DATE STATICE
Alocarea memoriei i iniializarea se realizeaz separat
class Test { static int contor; char * nume; int prioritate; };
Au aceleai proprieti ca i variabilele globale doar c sunt limitate de domeniul de vizibilitate al clasei
DATE STATICE
contor
FUNCII STATICE
Proprieti Pot accesa direct membri statici ai clasei Nu au acces la pointerul this (membri nestatic ai clasei)
Transformare apel de ctre compilator Apel funcie membr foo (7); foo(this *, 7)
Apel funcie static fooStatica (7); fooStatica( 7)
Nu poate exista o variant static i una nestatic a aceleai funcii Nu pot fi virtuale Nu pot fi declarate const sau volatile
FUNCII STATICE
Exemplu Calcul ID
class Utilizator{ private: int id; static int urmatorul_id; public: static int urmatorul_id_utilizator() { urmatorul_id ++; return urmatorul_id; } Utilizator() { id = Utilizator:: urmatorul_id ++; //or, id = urmatorul_id_utilizator(); } }; int Utilizator :: urmatorul_id = 0;
MODIFICATORUL CONST
Date constante Nu pot fi modificate Utile pentru declararea de constante Iniializarea
n lista de iniializri a constructorului clasei
class X { const int ci ; static const int MAX_VIEWS; // declaration public: X () : ci(17) { // initializarea unui membru const n interiorul unei liste de iniializare } }; // initializarea unui membru static constant const int X::MAX_VIEWS = 256;
MODIFICATORUL CONST
Funcii constante Nu pot modifica starea unui unui obiect Cod mai clar mpiedic modificrile accidentale ale datelor Sintax
class Utilizator{ private: int id; char * username; public: int getId() const { id=0; return id; } char * getUsername() const; }; char * Utilizator ::getUsername() const { return username; }
MODIFICATORUL MUTABLE
Se aplic la membri dat Pot fi ntotdeauna modificai chiar i n funcii constante Utili pentru membri care trebuie modificai n funcii const i nu reprezint interes pentru starea intern a obiectului Sintax mutable numeVariabil;
class Utilizator{ private: mutable int nraccessari; public: int getId() const { nraccessari++; return id; } };
Motenire
ASOCIERE
Relatie de cooperare intre clase - corespunzatoare unui verb oarecare din specificatie, diferita de relatia parteintreg (de exemplu relatia Student - Facultate). Este identificat prin has-a urmeaz
ASOCIERE
Multiplicitate
Notation Meaning
1
* 0..5 0..4,6,10
Exactly one
Zero or many Zero to five Zero to five, six or ten Exactly one (default)
urmeaz
AGREGARE
O clas printe are elemente de tipul clasei copil. n exemplul de mai jos ara poate avea mai multe Judee dar, n acelai timp, un Jude poate exista chiar i n cazul n care clasa ara nu exist.
COMPOZIIE
Subobiectele agregate aparin exclusiv agregatului din care fac parte, iar durata de via coincide cu ce a agregatorului Clasa copil nu poate exista dect dac exist o instan a clasei printe. n exemplul de mai jos instana clasei Comisie exist atta timp ct exist instana clasei
MOTENIRE
Este un mecanism care permite unei clase A s motenesc (date i funcii) a unei clase B. Relaie Nivel de clas kind-of (Cercul este un tip de Form) Obiect is-a (Obiectul cerc1 este o form) B clas de baz A subclas
EXEMPLU