Sunteți pe pagina 1din 4

Lucrarea de laborator

Tema: Moştenirea multiplă.

1.1 Scopul lucrării:


 Studierea regulilor de determinare a moştenirii multiple;
 Studierea avantajelor şi neajunsurilor moştenirii multiple;
 Probleme legate de utilizarea moştenirii multiple;
 Studierea rezolvării problemelor;
1.2 Sarcina lucrării:
a) Să se creeze, o ierarhie de moştenire: student, colaborator - practicant.
2 Indicații teoretice
Moştenirea multiplă, reprezintă prin sine moştenirea de la două sau mai multe clase. Pentru a înţelege
pentru ce ne trebuie moştenirea multiplă trebuie să ne amintim, că moştenirea simplă nu rezolvă toate
problemele, aşa cum câteodată ne obligă să alegem dintre două clase de bază potrivite.
Este interesantă părerea lui Buch referitor la acest mecanism: „Moştenirea multiplă este ca o paraşută:
de regulă, nu ne trebuie, dar, când întâmplător o să ne trebuiască, o să ne pară rău dacă nu o să fie la
îndemână” .
În aşa fel, acest mecanism este foarte necesar. Dar, el nu se foloseşte în toate limbajele, dar este
realizat în C++. Ca de exemplu: trebuie de descris clasa „Fereastra” cu buton şi denumire, însă clasele
Fereastra, Fereastra cu buton, Fereastra cu denumire, sunt deja create şi reprezintă prin sine următoarea
ierarhie.

Window

Button Titled
Window Window

3. Realizarea sarcinii
La scrierea programului urmăm pașii: Button
 declarăm clasa student care conține variabilele nota, anul, grupa, constructorul acestei clase si o
Titled
metodă afișă care extrage la ecran toate aceste vatiabile.
Window
 Declar clasa angajat care moștenește clasa joc și are o variabilă salariu.
 Cream clasa practicant care moștenește ambele clase de mai sus și are variabila nume, și metoda
afișare.
 În metoda main creăm o variabilă de tip practicant și observăm cum are loc accesul la
constructoruii claselor de bază și accesul la obiectele acestor clase.
Testăm programul.
Codul sursă și rezultatele obținute sunt prezentate mai jos.
#include<iostream>
#include<string>
#include<conio.h>
#include <stdio.h>
using namespace std;
class student
{
public:
float nota;
int anul;
string grupa;
student(string &s,int a, float n)
{
grupa=s;
nota = n;
if(a>0&&a<5)
{
anul=a;
}
else
{
cout<<"Anul e incorect!\nE setat anul 1\n";
anul=1;
}
}
void afisa(void)
{
cout<<grupa<<endl;
cout<<"Anul"<<anul<<endl;
cout<<"Nota medie"<<nota<<endl;
}
};
class angajat{
public:
float salariu;
angajat(float sal)
{ salariu = sal;
}
};
class practicant: public student,public angajat{
string nume;
public:
practicant(string &num, string &gr,int a, float n,float sal):student(gr,a,n),angajat(sal){
nume=num;
}
void afisare(){
cout<<nume<<" Grupa "<<grupa<<" \nAnul de studii "<<anul<<" are media "<<nota<<" si salariu/bursa
de "<<salariu<<" lei"<<endl;}
};
void main(){
string nume,prenume, grupa;
cout<<"\nIntrodu numele studentului\n";
cin>>nume;
cout<<"\nIntrodu prenumele studentului\n";
cin>>prenume;
nume+=" "+prenume;
cout<<"\nIntrodu grupa studentului\n";
cin>>grupa;
practicant prac(nume,grupa,2, 9.0,550);
system("CLS");
prac.afisare();
getch();
exit(1);
}

Fig.1. Rezultatul rulării programului.

Concluzii
La această lucrare de laborator ni-ma învățat să folosim moștenirea multiplă în proiectele noasre. Am
observat că aceasta nu diferă de moștenirea simplă, însă trabuie să gîndim mai bine modul în care se
accesează obiectele claselor de bază deoarece la acest tip de moștenire pot fi cazuri cînd e nedeterminat
variabilele cărei clase de bază trebuiec accesate.

Bibliografie
Sergiu G. Istrati “Programare. Inițializare în limbajele C și C++. Ciclu de prelegeri la disciplina
“Programare”” Chișinău U.T.M. 2003