Sunteți pe pagina 1din 5

Cunoștințe specifice programării orientată pe obiect

1. Ce este o clasă? (Cerner Brașov, Continental Iași)


Răspuns: O clasă este un tip de dată abstract care servește drept șablon pentru crearea obiectului
de același tip.

2. Ce este un obiect? (Cerner Brașov, Continental Iași)


Răspuns: Un obiect este rezultatul instanțierii unei clase.

Care sunt principiile OOP? (Cerner Brașov, Continental


3
Iași)
.
Răspuns:

1. Abstractizarea – abilitatea ca un program să ignore unele aspecte ale informației pe care o


manipulează, concentrându-se pe esențial.

2. Încapsularea – sau ascunderea informațiilor este mecanismul prin care se asigură faptul că
obiectele nu pot schimba direct starea internă a altor obiecte decât prin intermediul metodelor
puse la dispoziție de obiectul respectiv.

3. Moștenirea – mecanismul care permite crearea unor noi tipuri de date abstracte pornind de la
unele definite anterior.

4. Polimorfismul – abilitatea de a trata obiectele diferit în funcție de tipul sau clasa lor.
Abilitatea de a redefini metode în clasele derivate.

Care sunt diferențele dintre operatorul new și funcția malloc? (Continental Iași)
Răspuns:
1. Operatorul new returnează un pointer către tipul de dată alocat, pe când, funcția malloc
returneaza un pointer către tipul de dată void (sau pointer la obiect).
2. Operatorul new deduce dimensiunea tipului alocat, pe când funcția malloc trebuie să
primească numărul total de bytes ca parametru.
3. Operatorul new după alocarea memoriei, apelează constructorul clasei. (malloc nu)

Care sunt diferențele dintre funcția ,,free” și operatorul ,,delete”?


(Continental Iași)
Răspuns:
1. Free se folosește pentru dealocarea memoriei atunci când aceasta a fost alocată cu malloc.
2. Delete se folosește pentru dealocarea memoriei când aceasta a fost alocată cu new.
3. Pe lângă dealocarea memoriei, delete apelează destructorul clasei instanțiate.
Câte tipuri de cast există în C++? Când se folosesc fiecare? (Continental Iași, Cerner Brașov)
Răspuns:

1. static_cast<new_type>(data) - produce o eroare în unele cazuri, eliminând astfel potențiale


buguri. Se flosește pentru conversii aritmetice, pointer to pointer și nu pointer to non-pointer
sau const pointer la pointer. Este agreat pentru conversiile pe care compilatorul le poate
verifica.
2. const_cast<new_type>(data) – pentru a elimina atributul const sau volatile al tipului de date
către care pointează.
3. dynamic_cast<new_type>(data) – funcționează doar pentru pointeri sau referințe către
obiecte polimorfice. Dacă se face up-cast și obiectul către care pointează nu este de tipul la
care se face cast, va returna null.
4. reinterpret_cast<new_type>(data) – pot face cast la orice mai puțin ce face const_cast. Se
folosesc aceste tipuri de cast pentru ca fac verificări în plus și deci sunt mai sigure (cu
excepția lui reinterpret_cast).

Cine poate avea acces la metodele și membrii ,,private”? (Continental Iași)


Răspuns: Funcțiile și clasele friend sau clasa care le declară.

1. Ce este o metodă virtuală? (Continental Iași)


Răspuns: O metodă virtuală este o metodă care este precedată de cuvântul cheie virtual. O
metodă virtuală poate fi redefinită în clasele derivate și clasele care le conțin (clase polimorfe).
Clasele polimorfe conțin un pointer către un tabel ,,vtable” unde sunt înregistrate adresele
metodelor virtuale.

2. Ce este o metodă pur virtuală? (Continental Iași)


Răspuns: O metodă pur virtuală este o metodă de forma:
class Vehicle
{
public: virtual void drive() = 0;
};

O clasă care conține o metodă pur virtuală se numește clasă abstractă și nu poate fi instanțiată.
Corpul metodei pur virtuale (dacă se dorește instanțierea) trebuie definit în clasa derivată.

3. Care este diferența dintre o clasă pur virtuală și o clasă virtuală? (Continental Iași)
Răspuns: O clasă polimorfă poate fi instanțiată, pe când o clasă pur virtuală nu.

Pointerul este o variabila care contine o adresa de memorie.Aceasta variabila contine adresa unei
variabile.Avantaje:ofera posibilitatea de a modifica argumentele de apelare a functiilor
Permite o alocare dinamica a memoriei
Pot imbunatati efiecenta anumitor rutine
4. Care sunt specificatorii de acces și ce vizibilate au? (Cerner Brașov, Continental Iași)
Răspuns:
Specificator Clasa curentă Clasa derivată Accesibil prin obiect
public DA DA DA
protected DA DA NU
private DA NU NU

5. Care sunt diferențele dintre structură și clasă în C++? (Continental Iași, Cerner Brașov)
Răspuns:
1. Membrii unei clase sunt implicit ,,private”, iar la structură sunt ,,public”.
2. Într-o relație de moștenire, specificatorul de acces (: <specificator> Base) implicit în cazul
claselor este private iar în cazul structurilor este public.

6. Câte tipuri de moștenire sunt în C++? (Continental Iași)


7.
Răspuns: Din punct de vedere al acesului la membrii din clasa de bază moștenirea poate fi
public, private și protected.
Din punct de vedere al numărului de instanțe ale clasei de bază (în cazul unei scheme ,,diamond”)
avem moștenirea virtuală.
Din punct de vedere al numărului de clase pe care le moștenește o clasă derivată, avem moștenire
simplă și moștenire multiplă.

8. Cum poți simula o intefață (interface) Java în C++? (Continental Iași)


Răspuns: O intefață în C++ poate fi considerată o clasă pur virtuală (cu toate metodele pur
virtuale).

9. Câte caractere sunt în tipul char? (Continental Iași)


Răspuns: 255 (2 pow(sizeof(char)) – 1)

10. Cum definești un nou tip de dată în C++? (Continental Iași)


Răspuns:
typedef unsigned char byte;

 Stivă - Toate variabilele declarate în interiorul funcției vor prelua memoria din stiva

 Heap - Aceasta este memoria neutilizată a programului și poate fi utilizată pentru alocarea dinamică a
memoriei atunci când programul rulează.
11. Cum poți afla tipul unui obiect la runtime? (Cerner Brașov)
Răspuns: Cu funcția typeid(<obiect>). (Pentru ierarhii de clase: dacă obiectul este polimorfic).
class Animal
{
public:
Animal(){};
virtual ~Animal(){};
};
class Cat : public Animal{};
class Dog : public Animal{};

void findType(Animal *animal)


{
if(typeid(*animal) == typeid(Cat)) cout << "Miau";
else if(typeid(*animal) == typeid(Dog)) cout << "Hau";
}

12. Ce reprezintă funcțiile și metodele inline? (Continental Iași)


Răspuns: Funcțiile și metodele inline reprezintă un mod de a executa o secvență de cod fără
a folosi mecanismul de apelare a unei funcții obișnuite. Spre deosebire de macro, funcțiile inline
oferă type checking. Orice metodă definită în interiorul clasei este automat inline. Pentru a obține
o funcție inline, trebuie ca aceasta să fie declarată și definită în același loc.

13. Cum poti inițializa o variabilă const sau referință non-statică, membră a unei clase? (Continental
Iași)
Răspuns: O variabilă const sau referință poate fi inițializată în lista de inițializare a
constructorului.

14. Care este diferența dintre un pointer și referință? (Stabiplan Brașov)


Răspuns: Un pointer poate să își schimbe obiectul către care pointează, pe când referința nu. O
referință nu poate lua valoarea NULL, pe când un pointer poate. O referință trebuie inițializată tot
timpul, pe când un pointer nu. Pointerul suportă operații aritmetice, pe când referința nu.
Referința mai este numită și ,,syntactic sugar”.

15. Câte zone de memorie sunt? (Continetal Iași)


Răspuns:
1. static memory (zona de memorie statică) unde se memorează variabilele statice și
literalii de tip șir de caractere sau variabilele static și const.
2. automatic memory (stack/stivă) unde se memorează variabelele non-statice, în cadrul
unei funcții.
3. free store (aka heap) unde se memorează datele alocate cu new sau funcțiile alloc.
16. Scrie o funcție care alocă o matrice de numere întregi, folosind operatorul new. (Continental Iași)
Răspuns:
int** allocMatrix(const int rows, const int cols)
{
int **pMatrix = new int*[rows];
for(int i = 0; i < rows; i++)
{
pMatrix[i] = new int[cols];
}
return pMatrix;
}

17. Scrie o funcție care alocă o matrice de numere întregi, folosind funcția malloc. (Continental Iași)
Răspuns:
int** allocMatrix(const int rows, const int cols)
{
int **pMatrix = (int**) malloc(sizeof(int*) * rows);
for(int i = 0; i < rows; i++)
{
pMatrix[i] = (int*) malloc(sizeof(int) * cols);
}
return pMatrix;
}

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