Lab5.docx

6
MINISTERUL EDUCAŢIEI AL REPUBLICII MOLDOVA UNIVERSITATEA TEHNICĂ A MOLDOVEI CATEDRA DE MICROELECTRONICĂ ŞI INGINERIE BIOMEDICALĂ RAPORT Lucrarea de laborator Nr.5 la Programarea în C++ Tema: „Moştenirea multiplă” A efectuat: st. gr. ISBM-131 Moroi Ion A verificat: Balan Mihaela

Transcript of Lab5.docx

MINISTERUL EDUCAŢIEI AL REPUBLICII MOLDOVA

UNIVERSITATEA TEHNICĂ A MOLDOVEI

CATEDRA DE MICROELECTRONICĂ ŞI INGINERIE BIOMEDICALĂ

RAPORTLucrarea de laborator Nr.5

la Programarea în C++

Tema: „Moştenirea multiplă”

A efectuat: st. gr. ISBM-131 Moroi Ion

A verificat: Balan Mihaela

Chișinău, 2014

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;

Noțiuni teoreticeMoş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.

Figura 1 Moştenirea de la două clase rude.

Ambele clase pot fi utilizate ca clasă de bază, pentru noua, încă ne creată. În lipsa moştenirii multiple ar fi fost necesar de ales şi de completat funcţionalităţile care nu ajung. Nu numai că

utilizatorul este pus în faţa unei alegeri, completarea codului, prin sine contrazice principiului de minimizare a codului şi utilizarea lui repetată.

Moştenirea multiplă are loc şi în viaţă:

- Practicantul este student şi colaborator vremelnic. El primeşte notă pentru lucrul său, ca student, şi în acelaşi moment, execută funcţiile de colaborator, şi posibil primeşte şi salariu.

- Tehnicianul dentist este un lucrător sanitar, aşa cum a absolvit universitatea de medicină, în acelaşi moment el execută sarcini mai mult specifice fierarilor sau giuvaerilor.

- Ornitorincul hrăneşte copiii săi cu lapte, însă depune ouă.- Acţiunile reprezintă hârtii, ori valori de preţ.- Clasa iostream moşteneşte clasele: istream şi ostream.

ButtonTitledWindow

Window

TitledWindow

ButtonWindow

Drept ultimul exemplu nu este tocmai din viaţă, şi iarăşi din programare.

Definirea

Moştenirea multiplă se declară în felul următor:

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 10a) Să se creeze, o ierarhie de moştenire: 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: Efectuând această lucrare de laborator am acumulat cunoştinţe noi la tema

“Moștenirea multiplă”. În cadrul programului am creat clasele transportAerian și

transportPasageri cu variabile de tip întreg și caractere, am creat clasa Boeing care moștenește de

la clasele transportAerian și transportPasageri. Efectuând această lucrare de laborator am însușit

modul de lucru cu moștenirea multiplă în C++.