Sunteți pe pagina 1din 3

Subiecte examen teorie POO

Rand 1

1. Semnificatia si rolul cuvantului cheie this


- pointer catre obiectul a carui metoda se executa
- se foloseste pentru atribuiri in interiorul clasei, se pot returna cu el fie obiectul complet
fie membrii din el
- elimina probleme legate utilizarea obiectelor multiple, facand referire explicita la
obiectul in care se foloseste (astfel nu se incurca obiectul ce dorim sa il folosim cu un alt
obiect public definit)

2. Drepturi de acces intr-o clasa.Drepturi de acces intr-o clasa derivata(in functie de


tipul mosteniri)
- poate fi public, protected si private
- public poate fi accesat de oriunde obiectul declarat este vizibil
- protected pot fi accesati de membrii propirei lor clase dar si de membrii claselor
derivate din clasa din care fac parte
- private nu pot fi accesati decat de membrii clasei din care fac parte si de catre membrii
claselor declarate ca friend catre clasa din care fac parte
- implicit membrii unei clase sunt private daca nu se specifica altfel

3. Tabele VMT. Continut ,rol,utilizare de catre compilator.


- este utilizata in cazul metodelor virtuale pentru a se putea face diferenta intre ce metoda
a fost apelata. Este folosita in cazul mostenirilor iar motivul poate fi urmatorul : avand o
clasa de baza si doua clase derivate din ea, in cazul apelarii unei metode ce apare in clasa
de baza ca virtualape baza unui pointer catre tipul de obiect apelat.
- aceasta tabela contine adresele metodelor definite intr-o clasa, ea gestionand metodele
din toate clasele ce au o relatie de mostenire intre ele.

4. Rolul operatorului = si constructorului de copiere la transmiterea parametrilor


inspre functii si a rezultatelor intoarse de functii(prin valoare,referinta,pointer)
5. Explicati functionarea operatorilor << si >> la streamuri.
6. Tratarea polimorfica a exceptiilor.
- aparitia exceptiilor in clase nu pot fi tratate decat in clasele din care fac parte. O clasa
derivata nu poate trata o exceptie aparuta intr-o clasa de baza si invers din cauza
diferentelor de obiecte. De aceea tratarea exceptiilor trebuie facuta polimorfica in cazul
claselor, astfel fiecare clasa sa isi trateze singura exceptiile.
- acest lucru se poate face astfel :
- in fiecare clasa se declara cate o metoda virtuala : virtual void raise() {throw *this ;} ,
astfel fiecare clasa poate arunca o exceptie specifica ei
- apelarea metodei raise din clasa care o provoaca face posibila astfel tratarea exceptiei
aruncata de raise intr-o procedura catch() ce primeste ca si parametru clasa care arunca
acea exceptie. Se poate declara cate o procedura catch pentru fiecare clasa sau una
generala care nu va executa nimic.
Rand 2

1. Supraincarcarea numelui functiilor.Functii cu parametri luand valori


implicite.Utilitate
- Supraincarcarea numelui functiilor implica crearea a mai multor functii in aceeasi clasa
dar care difera prin parametrii primiti sau prin tipul functiei.
- Acest lucru permite astfel tratarea unor evenimente in mod diferit in functie de
parametrii primiti sau de tipul ce trebuie returnat fara a fi vreo problema in diferentierea
metodelor ce trebuiesc folosite prin schimbarea denumirii.
- definirea functiilor ce seteaza valori implicite parametrilor ajuta la initializarea
obiectelor pentru diferite cazuri sau necesitati. Acest mecanism este folosit si la
implementarea constructorilor.
2. Mostenirea multipla.Mostenireea multipla virtuala.
3. Utilizarea polimorfismului pt tratarea uniforma a masivelor eterogene.
4. Necesitatea mecanismului de frend.Functii metode si clase frend.
- declararea unei functii ca friend pentru o clasa permite acestei functii sa acceseze
membrii protected sau privat din acea clasa
- aceste functii nu fac parte din clasa in care sunt declarate, ele putand fi apelate oriunde
- de asemenea este posibila crearea de clase friend intre ele. Acest lucru se face prin
definirea unei functii friend intr-o clasa la o alta clasa. Apoi in aceasta functie putem
modifica sau accesa membrii clasei cu care suntem prieteni. Acest lucru permite astfel
conversia de obiecte, initializarea dintr-o alta clasa, etc...
- pentru a functiona este necesar ca clasa ce va contine functia de tip friend sa fie
declarata inainte de clasa cu care va fi friend deoarece se va face referire la aceasta ca si
parametru
- este de retinut ca daca declaram un prieten la o clasa, iar la acest prieten ii este prieten
alta clasa, aceasta clasa nu va fi prieten cu prima clasa, mostenirea fiind netranzitiva.
5. Scrierea/citirea pe/de pe streamuri a claselor proprii.Exemplificare.
6. Achizitie si eliberare de resurse in contextul mecanismului de tratare a exceptiilor
- acest mecanism trateaza o problema destul de complicata. Alocarea de resurse in cadrul
unui program inseamna privarea altor programme de la utilizarea acestui spatiu. In
programarea orientata obiect, aceste resurse pot fi alocate pentru diferite obiecte, fisiere
deschise, etc... In cazul aparitiei unei exceptii singurele secvente de cod ce mai pot fi
executate sunt destructorii. Astfel exista un mecanism care detecteaza cand o exceptie ce
nu poate fi tratate apare si elibereaza automat resursele in acel moment. Rezultatul este ca
un fisier deschis se inchide si apoi poate fi utilizat si de alte aplicatii. Locatiile de
memorie utilizate pot fi atribuite altor procese, etc...

Rand 3

1. Membrii statici.Descriere.Exemplu.Utilitate
- membrii statici pot fi comparati cu variabilele globale dar specializati pe clase.
- acestia se declara intr-o clasa iar apoi toate obiectele de tipul acestei clase, vor dispune
de acest membru, de aceeasi instanta a lui. Astfel la modificarea lui, acesta se va modifica
si pentru restul obiectelor de tipul clasei ce il contine
- membrul de tip static trebuie sa fie declarat in interiorul clasei, dar se poate defini doar
in afara acesteia pentru a evita definirea sa de mai multe ori
- acest membru poate fi accesat din orice obiect de tipul clasei care il contine si poate
chiar fi accesat facand referire direct la el prin clasa din care face parte
- de asemenea pot exista si metode statice, ele se acceseaza la fel, dar aceste metode nu
pot accesa decat date statice
- acestia pot fi utili spre exemplu pentru pastrearea unor generalitati in cadrul unor
obiecte, de asemenea pentru a sincroniza obiectele intre ele sau pentru a pastra anumite
evidente.
2. Constructori si destructori in contextul mostenirii
3. Legarea statica si dinamica.Implementarea de catre compilator a polimorfismului
folosind VMT
4. Riscuri la redefinirea implicita a operatoruli = si a constructorului de
copiere.Solutii de evitare.
5. Implementarea manipulatorilor de format cu parametrii.Exemplificare.
6. Discriminarea exceptiilor cu schimb de informatii.Implementarea de catre
compilator a mecenismului.

Rand 4

1. Variabile membru de tip_property.


- membrii de tip property sunt metode declarate cu cuvantul cheie __property inainte.
Aceste metode pot fi de scriere sau de citire de date din clasa si ele trebuie sa fie in
pereche : get_Data() set_Data ;
- intr-o astfel de situatie compilatorul genereaza un membru cu numele Data care apoi
poate fi utilizat si accesat in citirea valorii sale sau scrierea valorii sale la fel cum se
foloseste orice alta metoda a clasei
2. Necesitetea si rolul aparitiei cuvantului cheie protected.
3. Metode pure si clase abstracte.Utilitate
4. Redefinirea operatorilor prin metode si prin functii frend.Particularitatii.
5. Implementare manipulatorilor de format fara parametrii.Exemplificare.
6. Solutia c++ de tratare a exceptiilor.Discriminarea exceptiilor

S-ar putea să vă placă și