25 0 103KB
Ministerul Educaţiei al Republicii Moldova Universitatea Tehnică a Moldovei
Catedra FCIM
Raport Lucrarea de laborator Nr.6 Programarea orientată pe obiecte
varianta 1
A efectuat:
st.gr.CR-202 , Rosca Ana
A verificat: Natalia
lector univ.Pasat
Chișinău 2021
Tema : Polimorfism. Funcţii virtuale
Scopul lucrării:
Studierea polimorfismului; Studierea principiilor legăturii târzii; Studierea funcţiilor virtuale; Polimorfismul ad-hoc; Realizarea funcţiilor virtuale; Studierea claselor abstracte.
Noțiuni Teoretice : 1. Ce fel de mecanisme corespund cu denumirea polimorfismului Cuvântul polimorfism provine şi aproximativ se traduce ca „multe forme” (poly – multe, morphos formă). Cuvântul morphos are legătură cu zeul grec Morphus, care putea să apară în vis oamenilor în orişice formă în care el doreşte. 2. Si functiile obisnuite si cele virtuale pot fi predefinite,prin ce se deosebesc
ele ? Funcţiile virtuale se deosebesc de cele obişnuite numai prin metodele de acces. Dar utilizarea lor are sens numai cu utilizarea referinţelor sau a pointerilor.
3. Ce reprezinta legatura cu intirziere? Sub legături târzii trebuie de înţeles mecanismul care permite definirea tipului dinamic în timpul executării programului, dar nu în timpul compilării. Un mecanism asemănător sunt descriptorii de fişiere, aşa cum fişierele se deschid în timpul executării programului, dar nu în timpul compilării. Acest mecanism este baza polimorfismului, aşa cum realizează funcţiile virtuale. 4. Care sunt conditiile de realizare a polimorfismului? Variabila polimorfă: conţine 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 aşteptat, tipul real poate fi un subtip a tipului aşteptat. În C++ variabilele polimorfe există numai ca referinţe şi pointeri. 5. Ce reprezinta polimorfismul ad-hoc Mai multe confuzii apar, dacă programatorul încearcă să predefinească funcţia virtuală în subclasă, dar cu aceasta el se referă (posibil, din greşeală) alt tip de argumente. De exemplu, clasa părinte conţine descrierea: virtual void display (char *, int); Subclasa încearcă să predefinească metoda: virtual void display (char *, short); 6. Prin ce se deosebsc clasele abstracte de cele obisnuite? comportamentul clasei părinte se modifică pentru moştenitor. Pentru metodele amânate, totuşi, comportamentul pur şi simplu nu este definit. Orice activitate folositoare este dată în clasa fiică.-++ 7. Cum se defineste functia pur virtuala? virtual void draw() = 0; Compilatorul nu permite utilizatorului crearea unui exemplar a clasei, care conţine pur metodele virtuale, de aceia aceste clase sunt numite abstracte. Subclasele trebuie să redefinească aceste metode.
Sarcina Varianta I Creaţi clasa abstractă de bază Worker cu funcţia virtuală calcularea salariului. Creaţi clasele derivate StateWorker, HourlyWorker şi CommissionWorker, în care funcţia dată este predefinită. În funcţia main determinaţi masivul de pointeri la clasa abstractă, cărei i se atribuie adresele obiectelor claselor derivate.
Codul programului : #include #include using namespace std; class Worker //basic worker { public: float brut, net; Worker() { brut = 0; net = 0; } Worker(float b) { brut = b; } virtual void calculare_salariu() { float AM; // asigurarea medicala 9% float FS; // fondul social 18% float FP; // fondul de pensii 6% float IV; // impozit pe venit 12%
cout