Sunteți pe pagina 1din 6

Tema 1

Tip abstract de date - tip de date definit de catre utilizator utilizind


tipurile deja existente cu un anumit scop .
Structura - este o multime de date grupate conform unei ierarhii .
Prin ce se deosebeste structura de alte tipuri de date? - structura
poate fi comparata cu un tablou , insa tabloul contine date de acelasi tip pe
cind structura de tipuri diferite.
Cum se defineste o variabila de tip structura? in c typedef
struct<nume>{ . . . } ,
in c++ struct<nume> { . . . }
Cind se utilizeaza punctul cind sageata? - De obicei se utilizeaza
punctul , sageata se foloseste doar atunci cind se face alocarea dinamica a
structurei.
Care sunt deosebirile intre structurile din c si c++? In c trebuie sa
folosim typedef p/u a crea o variabila de tip structura sau sa scrim <struct>
<numele structurei> <numele variabilei> pe cind in c++ doar scrim
<numele structurei> <numele variabilei>
O structura poate sa contina o alta structura ? Da, lucreaza exact ca
compozitia in poo.
O structura poate sa contin pointeri spre ea insasi? Da aceste tipuri
de structuri se numesc self referential structures.
Poate oare sa fie creata dinamic o variabila de tip structura? Da,
struct carte{},*book;
book = new book;
Explicati cum are loc apelul prin referinta Pentru modificarea variabilei
de tip structura ea se transmite prin referinta: void setare(structura
*variabila_structurei, parametri ); , iar cind are loc apelull functiei se
transmite adresa variabilei si parametri.

Tema 2
Explicati termenul de initializare Crearea unui obiect de tipul clasei
Ce cuvinte cheie se utilizeaza pentru definire constructorului sau
destructorului? se utilizeaza cu acelasi nume ca al clasei , la destructor
este precedat de ~.
Poate oare un constructor sa returneze o valoare? - nu , nici chiar void
Poate oare sa exista clase fara constructori? nu , daca programatoru-l
nu de clara constructorul si constructorul de coipiere este creat automat de
catre compilator.
Citi constructori poate contine o clasa? Dar destructori? De ce?
Clasa poate sa contina un numar nenumarat de constructori , in dependenta

de caz . Dar destructorul poate fi numai unul pentru ca el nu are paramaetri


deci nu poate fi supraincarcat , si este unic pentru o clasa.

Enumarati tipurile de constructori .


a) Constructor fara parametri ( sau constructor implicit)
b) Constructor cu parametri
a. Constructor general (care initializeaza toate cimpurile)
b. Constructori cu un anumit numar de parametri
c) Constructor de copiere( este un constructor care creeaza un obiect null prin
cloanrea unei instante deja existente)
d) Constructor de schimabare a tipului ( este un constructor care primeste un tip
de date strain pentru clasa respectiva si il converteste in obiect de tipul dat )

Cum se apeleaza un constructor constructorul se noteaza ca o functie


cu numele clasei cu sau fara parametri.
De ce este nevoie de definit un constructor de copiere? - Pentru ca
putem avea scurgeri de memorie atunci cind alocam dinamic memoria si p/u
ca constructorul generat automat implica copierea bit cu bit ceea ce nu
intotdeauna este satisfacator.
De ce este nevoie de definit un constructor de conversie a tipului?
Pentru convertirea mai comoda a tipului de date.
In ce cazuri se foloseste constructorul de copiere ,care este sintaxa
apelului? Constructorul de copiere se foloseste in urmatoarel cazuri:
-

Initializarea unui obiect din altul de acelasi tip


Copierea unui obiect p/u transmiterea lui ca a argument a unei
functii
Copierea unui obiect p/u returnarea lui din corpul unei functii

<numele clasei>(const <numele clsei> &<obiect>){ ... }


Ce sunt listele de initializare(initializatorii)? - mecanism folosit in
constuctori care contribuie la evitarea cheltuielii necesare pentru initializarea
cimpurilor .
In care caz se defineste obligatoriu constructorul implicit? - in cazul
utilizrii tabloului de obiecte se definete n mod obligatoriu un constructor
implicit, care se apeleaz pentru iniializarea elementelor tabloului.

Tema 3
Este supraincarcarea operatorilor importanta? Da , supraincararea
operatorilor e importanta, astfel noi putem invata operatorii de a lucra cu
tipuri abstracte ca si cum ar fi tipuri de baza.

Ce cuvinte cheie sunt utilizate pentru supraincarcarea operatorilor?


Numele clasei la care redefinim operatorul , tip rezultatului daca il
returneza , cuv. Cheie operator si insasi operatorul.
Pot operatorii sa returneze rezultat ? Da, operatorii pot returna
rezultat .

Cum se clasifica operatorii?


-

Aritmetici
Relationali
Logici
Pe biti

Dupa numar(unar , binari , ternari)


In cazul supraincarcarii exista operatori care se supraincarca si operatori care
nu se supraincarca.
Cum compilatorul intelege prefixarea si postfixarea operatorilor
binari?
Pentru a distinge postfixarea de prefixarea dor ii
transmitem ca parametru cuv cheie int .
Complex operator++(); // preincrement
Complex operator++(int); // postincrement
Care operatori nu pot fi supraincarcati: # , :: , ; , ; , ., {} , * ca
operator de dereparare , &pentru preluare adresei , sizeof , ternar
Nu se recomanda sa fie supraincarcati: new , delete, [] , () , new ,
new[] , delete , delete[]
Care este sintaxa de utilizare a operatorilor? Sintaxa ramine aceeasi
ca si la tipurile predefinite , atunci cind utilizam operatorul pentru tipul
abstract compilatorul utilizeaza operatorul redefinit de noi.
Cum este utilizat operatorul () - Operatorul se foloseste in mod diferit
si la prima vedere poate fi confundat cu constructorul clasei.
Cum se utilizeaza operatorul -> Operatorul dat este folosit p/u
indicare parametrilor clasei.
De ce este nevoie de 2 metode de supraincarcare: ca metoda a
clasei si ca functie prietena? Se utilizea 2 tipuri de supraincarcare p/u
ca operatorul care dorim sa-l predefinim deja apartine unei clase de sistem
(ex operatori de intrare si iesire aprtin clasei istream si respecti ostream) de
aceea sunt utlizate ca functii prietene.
La care tip apartine operatorul << Operatorul dat apatine la tipul
operatorilr de intrare/iesire care ase supraincarca su ajutorul functiilor
pritetene .

In ce cazuri trebuie numaidecit de supraincarcat operatorul de


atribuire? Cind alocam dinamic memoria.

Tema 4
Prin ce se deosebesc formele de mostenire? -

Mostenirea publica ( metodele publice ale clasei derivate sunt met


poublice ale clasei car mosteneste , met protected sunt mostenite
ca protected , iar metodele private nu sunt mostenite)
Mostenirea protejata/protected ( met. public si protected sunt
mostenite ca metode protected )
Mostenirea privata/private ( met public si protected sunt mostenite
ca metode private)

Ce reprezinta compozitia? Compozitia reprezinta relatiile dintre obiecte ,


atunci cind mostenirea reprezinta relatia dintre clase . Compozitia realizeaza
relatia de a contine
Care sunt avantajele mostenirii? - Avantajul mostenirii consta in aceea
ca nu trebuie sa declaram de fiecare data clasele care sunt asemantoare,
trebuie sa declaram o clasa generala cara va fi mostenita si modificata de
altele.
Cum lucreza constructorii la mostenire? - dup parantezele rotunde a
constructorului derivat se scrie constructorul de baz.
Ce reprezinta principiul de substitutie? - obiectul clasei derivate poate fi
utilizat n locul obiectului de baz. Animal *ptr = new Dog;
In ce cazuri se utilizeaza mostenirea si in care compozitia? - Daca
noua clasa este un subtip atunci utilizam mostenirea , in caz contrar apare
intrbarea :nu este noua clasa un container , atunci utilizam compozitia.
Cum pot fi initalizate elementele containerului ? - ???

Tema 5
Care sunt avantajele mostenirii multiple? Mostenirea multipla
reprezinta mostenirea a 2 sau mai multe clase , ceea ce nu ne permite
mostenirea obisnuita.

Care sunt problemele la realizarea mostenirei multiple? - Una din


problemele mostenirii multiple consta in acea ca atunci cind ambele clase pe care le
mostenim au acelasi parametru . Fiind ambele mostenite compilatorul nu stie cu
care sa opereze atunci cind dorim s-o initializam sau schimbam.
Clasifcati problemele de mostenirea multipla a) Au aceeasi parametri
b) Sunt clase inrudite
Cum se rezolva problemele de mostenirea multipla?
a) Indicam clasa( c.A::x=10; c.B::x=15; )
b) Se utilizeaza forma de mostenire virtuala
De ce este util mostenirea virtuala?

Tema 6
Ce fel de mecanisme corespund cu denumirea polimorfismului in c+
+ polimorfismul este capacitatea in timpul executiei programului valorle
diferito tipuri.
Si functiile obisnuite si cele virtuale pot fi predefinite , prin ce se
deosebesc ele ? - Funciile virtuale se deosebesc de cele obinuite numai
prin metodele de acces. Dar utilizarea lor are sens numai cu utilizarea
referinelor sau a pointerilor.
Ce reprezinta legatura cu intirziere? - Sub legturi trzii trebuie de
neles mecanismul care permite definirea tipului dinamic n timpul executrii
programului, dar nu n timpul compilrii. Un mecanism asemntor sunt
descriptorii de fiiere, aa cum fiierele se deschid n timpul executrii
programului, dar nu n timpul compilrii. Acest mecanism este baza
polimorfismului, aa cum realizeaz funciile virtuale.
Care sunt conditiile de realizare a polimorfismului?
Variabile polimorfe - Variabila polimorf: conine valoarea, care se refer la
diferite tipuri de date. Variabilele polimorfe realizeaz principiul de
substituire. Cu alte cuvinte, cu toate c pentru asemenea variabile exist un
tip de date ateptat, tipul real poate fi un subtip a tipului ateptat. n C++
variabilele polimorfe exist numai ca referine i pointeri.
Ce reprezinta polimorfismul ad-hoc Mai multe confuzii apar, dac
programatorul ncearc s predefineasc funcia virtual n subclas, dar cu
aceasta el se refer (posibil, din greeal) alt tip de argumente. De exemplu,
clasa printe conine descrierea: virtual void display (char *, int);
Subclasa ncearc s predefineasc metoda: virtual void display (char *, short);
Prin ce se deosebsc clasele abstracte de cele obisnuite?
comportamentul clasei printe se modific pentru motenitor. Pentru
metodele amnate, totui, comportamentul pur i simplu nu este definit.
Orice activitate folositoare este dat n clasa fiic.-++

Cum se defineste functia pur virtuala? - virtual void draw() = 0;


Compilatorul nu permite utilizatorului crearea unui exemplar a clasei, care
conine pur metodele virtuale, de aceia aceste clase sunt numite abstracte.
Subclasele trebuie s redefineasc aceste metode.

Tema 7
Ce reprezinta sabloanele ? - un mecanism ce permite s scrii un algoritm,
care nu este legat de un tip anumit. Cel mai des, abloanele sunt utilizate
pentru crearea container i algoritmi abstraci.
Care sunt avantajele utilizrii abloanelor? - micoreaz codul de ieire,
care duce la, micorarea cantitii de erori, micoreaz introducerea
modificrilor n cod i micoreaz prezentarea programelor n general, aa
cum se micoreaz calitatea tipurilor i funciilor date.

Pentru ce se utilizeaz specializarea? - reprezint nscrierea nc a unei


funcii pentru un tip determinat. n cazul funciilor aceast de obicei nu este
o funcie ablon cu acelai nume i cu parametri predefinii. Aceast funcie
poate avea un avantaj mai mare dect abloanele.
Ce poate fi un ablon? orice functie sau clasa
Care sunt problemele utilizrii abloanelor? - sabloanele lucreaza bine
cu tipurile de date int , float insa creeaza unele probleme la siruri.
Utilizarea abloanelor duce la economia memoriei? - abloanele nu
micoreaz compilarea modulului, mai degrab chiar invers, dar simitor
micoreaz codul de ieire
Poate o clas ablon s moteneasc una obinuit i invers? DA.