Sunteți pe pagina 1din 5

MINISTERUL EDUCAIEI AL REPUBLICII MOLDOVA

UNIVERSITATEA TEHNIC A MOLDOVEI


CATEDRA DE MICROELECTRONIC I INGINERIE BIOMEDICAL

RAPORT
Lucrarea de laborator Nr.5
la Programarea n C++
Tema: Motenirea multipl

A efectuat:

st. gr. ISBM-131 Moroi Ion

A verificat:

Balan Mihaela

Chiinu, 2014

Scopul lucrrii:
Studierea regulilor de determinare a motenirii multiple;
Studierea avantajelor i neajunsurilor motenirii multiple;
Probleme legate de utilizarea motenirii multiple;
Studierea rezolvrii problemelor;
Noiuni teoretice
Motenirea multipl, reprezint prin sine motenirea de la dou sau mai multe clase. Pentru
a nelege pentru ce ne trebuie motenirea multipl trebuie s ne amintim, c motenirea simpl
nu rezolv toate problemele, aa cum cteodat ne oblig s alegem dintre dou clase de baz
potrivite.
Este interesant prerea lui Buch referitor la acest mecanism: Motenirea multipl este ca
o paraut: de regul, nu ne trebuie, dar, cnd ntmpltor o s ne trebuiasc, o s ne par ru
dac nu o s fie la ndemn .
n aa fel, acest mecanism este foarte necesar. Dar, el nu se folosete 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 urmtoarea ierarhie.

Figura 1 Motenirea de la dou clase rude.


Ambele clase pot fi utilizate ca clas de baz, pentru noua, nc ne creat. n lipsa motenirii
Window

Button
Window

Titled
Window

Button
Titled
Window

multiple ar fi fost necesar de ales i de completat funcionalitile care nu ajung. Nu numai c


utilizatorul este pus n faa unei alegeri, completarea codului, prin sine contrazice principiului
de minimizare a codului i utilizarea lui repetat.
Motenirea multipl are loc i n via:
-

Practicantul este student i colaborator vremelnic. El primete not pentru lucrul su, ca
student, i n acelai moment, execut funciile de colaborator, i posibil primete i
salariu.
Tehnicianul dentist este un lucrtor sanitar, aa cum a absolvit universitatea de
medicin, n acelai moment el execut sarcini mai mult specifice fierarilor sau
giuvaerilor.
Ornitorincul hrnete copiii si cu lapte, ns depune ou.
Aciunile reprezint hrtii, ori valori de pre.

- Clasa iostream motenete clasele: istream i ostream.


Drept ultimul exemplu nu este tocmai din via, i iari din programare.
Definirea
Motenirea multipl se declar n felul urmtor:
class Student{
public:
int mark;
...
};
class Worker{
public:
int salary;
};
class Practicant: public Student, public Worker{
};
void PutMark(Student& s, int mark){
s.mark = mark;
}
void PutSalary(Worker& w, int salary){
w. salary = salary;
}
void main(){
Practicant p;
PutMark(p,5);
PutSalary(p,200);
}

Varianta 10
a S se creeze, o ierarhie de motenire: transport aerian, transport de pasageri lainer Boing
747.

#include <iostream>
#include <windows.h>
using namespace std;
class transportAerian {
protected:
char *type;
public:
transportAerian() : type(NULL) { }
transportAerian(char *t) {
type = new char[strlen(t)+1];
strcpy (type, t);
}

transportAerian(const transportAerian& obj) {


type = new char [strlen(obj.type)+1];
strcpy (type, obj.type);
}
~transportAerian () {
if (type) delete [] type;
}
};
class transportPasageri {
protected:
char *company_name;
int nr;
public:
transportPasageri () : company_name(NULL), nr(0) {}
transportPasageri (char *cn, int n) {
company_name = new char [strlen(cn)+1];
strcpy(company_name, cn);
nr=n;
}
transportPasageri (const transportPasageri & obj) {
company_name = new char [strlen(obj.company_name)+1];
strcpy (company_name, obj.company_name);
nr = obj.nr;
}
~transportPasageri () {
if (company_name) delete [] company_name;
nr = 0;
}
};
class Boeing: public transportAerian, public transportPasageri {
int seats;
public:
Boeing () : seats(0) { }
Boeing (char *type, char*company_name, int nr, int s) :
transportAerian(type),
transportPasageri(company_name),
transportPasageri(nr) {
/**transportAerian:: type = new char [strlen(type)+1];
strcpy (transportAerian:: type, t);
transportPasageri:: company_name = new char [strlen(cn)+1];
strcpy (transportPasageri:: company_name, cn);
transportPasageri:: nr = n;*/
seats = s;
}
friend ostream & operator << (ostream & out, Boeing & obj) {
out << "\n\tBoeing-747";
out << "\nTip transport: "<< obj.type;
out << "\nDenumirea companiei aeriene: "<<obj.company_name;

out << "\nNr. de avioane detinute de catre companie:" <<obj.nr;


out << "\nNr. de locuri in Boeing-747: "<<obj.seats;
return out;
}
friend istream & operator >> (istream & in, Boeing & obj) {
char ch[50];
cout << "Tipul transportului: ";
in>>ch;
obj.type = new char [strlen(ch)+1];
strcpy(obj.type, ch);
cout << "Denumirea companiei: ";
in>>ch;
obj.company_name = new char [strlen(ch)+1];
strcpy(obj.company_name, ch);
cout << "Nr. de avioane detinute de catre companie: ";
in >> obj.nr;
cout << "Nr. de locuri in Boeing-747: ";
in >> obj.seats;
return in;
}
};
int main () {
Boeing B;
cin >> B;
cout << B;
return 0;
}
Concluzie: Efectund aceast lucrare de laborator am acumulat cunotine noi la tema
Motenirea multipl. n cadrul programului am creat clasele transportAerian i
transportPasageri cu variabile de tip ntreg i caractere, am creat clasa Boeing care motenete de
la clasele transportAerian i transportPasageri. Efectund aceast lucrare de laborator am nsuit
modul de lucru cu motenirea multipl n C++.