Funcții ca părți ale unor structuri (funcții membre)
Denumite și funcții membre sau metode, implicit publice, nu cresc dimensiunea tipului de date, acces direct la câmpurile structurii
Exemple de funcții membre în C++
modificare(int xx, int yy)
afisare()
Operatorul de rezoluție "::"
Permite accesul la un indicator cu domeniu fișier, dintr-un bloc în care acesta nu e vizibil
Separarea codului în zona de definiție și cea de implementare
1. Definirea structurii cu câmpurile și funcțiile necesare
2. Implementarea funcțiilor
Funcții inline
Substituie apelul funcției cu codul ei, pentru o execuție mai rapidă
Argumente de funcții cu valori implicite
Se pot apela funcții cu mai puține argumente decât cele din declarație, dacă au parametri cu valori implicite (default)
Parametrii impliciti trebuie să se găsească la finalul listei de parametri
Supradefinirea funcțiilor (overload)
În C++ pot exista în același program mai multe funcții cu același nume, dar semnătură diferită
Tipul referință
Un tip de date nou introdus în C++ pentru transmiterea parametrilor prin referință (pass-by-reference)
Necesită atenție sporită deoarece erori de editare generează erori logice greu de detectat
&
Operator de referențiere (adresare)
*
Operatorul de dereferențiere (indirectare)
Se operează direct la adresele lor
La ieșirea din funcție au valorile modificate
majoreaza
Incrementează valoarea variabilei cu 5
Referința la x e primită ca argument
Nu se face o copie a lui x, ci se lucrează direct la adresa acelei variabile
O referință nu poate exista singură (int &ref) - se referă la ceva/cineva -> trebuie inițializată!
Când operatorul & este utilizat împreună cu o variabilă, expresia înseamnă "adresa variabilei indicate de referință"
Un pointer (int *pint) poate exista separat și poate fi "refolosit"
O referință poate fi văzută ca un alias al unei variabile
O referință nu poate fi refolosită pentru o altă variabilă
const
(în C++) Modificator de tip - declară o constantă de un anumit tip
Modificarea ulterioară a valorii acestor variabile este interzisă
const (în funcții)
Informează funcția că nu are voie să modifice valoarea argumentului, poate doar să o folosească
const (în funcții membre)
Specifică faptul că funcția respectivă nu modifică (nu alterează) câmpurile de date ale variabilei de tip structură care o va folosi, ci doar le citește sau utilizează
Prezența parantezelor pătrate "[ ]" în alocare (new) necesită prezența lor la eliberare (delete)
Lipsa în zona eliberării a "[ ]" duce la eliberarea incompletă a memoriei (doar prima locație - cea care corespunde elementului de pe poziția 0 - este eliberată)
bool
Tip de date care poate lua valorile true (1) sau false (0)
Funcțiile cu semnături diferite sunt supradefiniri ale funcției
Funcțiile cu semnături identice nu pot face parte din același program
Funcțiile cu semnături diferite pot face parte din același program
Alocarea dinamică a unei matrice
1. Aloc spațiu pentru un vector de pointeri la T
2. Pentru fiecare element din vector, aloc spațiu pentru un vector de T
După eliberarea memoriei ocupate de matrice, încercarea de a accesa elementele matricei duce la afișarea a ceea ce se găsește la acea adresă
Pentru a evita accesarea memoriei eliberate, se setează pointerul la NULL după eliberare
using - cuvântul cheie - se poate folosi ca directivă pentru introducerea în zona de lucru a unui întreg namespace
using și using namespace - sunt valabile doar în blocul în care au fost menționate sau în întregul cod dacă au fost folosite în manieră globală
Namespace alias
Declarare de nume alternative pentru namespace-uri existente
Namespace std - toate fișierele din biblioteca standard C++ își au declarate variabilele/obiectele necesare în namespace-ul std
includem biblioteca <iostream> si apoi precizam ca avem nevoie de obiectele declarate in std (using namespace std), aici fiind declarate obiectele cin si cout (sau le utilizam astfel std::cin/std::cout). endl e tot o variabila din std.