Ministerul Educaţiei al Republicii Moldova Universitatea Tehnică a Moldovei
Catedra: Automatica și Tehnologii Informaționale
RAPORT ucrare de laborator !r"# la Programarea in Limbajul C++
A efectuat:
A verificat:
Chisinau $%&'
LUCRAREA DE LABORATOR N NR 4 Mo(tenirea (i compo)iţia Tema: Scopul lucrării: studierea mo(tenirii* avanta+ele (i de)avanta+ele, • studierea compo)iţiei, • studierea regulilor de definire a mo(tenirii (i compo)iţiei, • studierea formelor de mo(tenire, • studierea iniţiali)atorilor, • principiul de substituţie, • mo(tenirea (i compo)iţia - ce să alegem" • Noţiuni de baă Mo(tenirea Mo(tenirea repre)intă unul din cele trei mecanisme de ba)ă a mo(tenirii orientate pe obiec obiecte te"" Mo(te Mo(teni nire reaa poate poate fi stud studia iată tă din din două două punc puncte te de vede vedere: re: de)v de)vol olta tato toru rulu luii (i utili)atorului clasei" .in .in punc punctt de vede vedere re a de)v de)vol oltat tator orulu uluii mo(te mo(teni nirea rea /nsea /nseamn mnă* ă* că comp compor ortar tarea ea (i proprietăţile clasei derivate* sunt ni(te de)voltări a clasei de ba)ă" .in punct de vedere a utili)atorului - mo(tenirea repre)intă e0istenţa unor particularităţi de schimbare independenta a claselor cu o interfaţă unică 1Inginerii TI (i constructorii de automobile* /n primul r2nd sunt inginerii3" Avanta+ele Avanta+ele mo(tenirii: 4 mic(ora mic(orarea rea cantit cantităţii ăţii codulu coduluii (i folosi folosirea rea lui repetat repetată, ă, 4 mic(ora mic(orarea rea cantit cantităţii ăţii eroril erorilor or (i a preţ preţulu uluii de de cost, cost, 4 o int inter erfa faţa ţa uni unică că (i (i subs substi titu tuţi ţia, a, 4 mărir ărirea ea vite vite)e )eii de de pre prelu lucr crar are, e, Cheltu Cheltuiel ielile ile mo(ten mo(tenirii irii:: unicel unicelee cheltui cheltuieli eli la folosi folosirea rea mo(ten mo(tenirii irii poate poate fi numită numită mic(orarea mic(orarea vite)ei la compilarea codului" codului" Totu(i otu(i preocupările preocupările de eficacitate nu trebuie să intre in contra)icere contra)icere cu avanta+ele* avanta+ele* a(a cum cheltuielile* cheltuielile* cu adevărat* adevărat* nu sunt esenţiale* a(a cum unele din ele pot fi ocolite prin utili)area funcţiilor de substituire" Compo)iţia Compo)iţia Compo)iţia repre)intă /ncă un mecanism* mecanism* legat de programarea orientată orientată pe obiecte* care repre)intă relaţia dintre obiecte* atunci c2nd mo(tenirea este relaţia dintre clase" Mo(tenirea reali)ea)ă relaţia a fi „is a ”. Dog este mamifer, iar mamiferul – animal. Compo)iţia reali)ea)ă relaţia de a conţine „has a ”. Automobilul conţine motor (i roţi. .efinirea compo)iţiei Cu adevărat compo)iţia este folosită foarte larg* a(a cum variabilele /ncorporate conţin un tip (i sunt utili)ate la definirea clasei" .ar la folosirea variabilelor /ncorporate nu apar /ntrebări* ceia ce nu se poate spune despre clasele utili)atorilor" .efinirea nu este grea* /nsă utili)area constructorilor creea)ă probleme" class Car{ Engine e; };
!arian"a !arian"a 4 53 .e creat o ierarhie a claselor om (i colaborator, care ocupă un post anumit (i prime(te un salariu anumit" .eterminaţi flu0ul de ie(ire (i flu0ul de intrare* constructorul de copiere* operatorii de atribuire prin anumite funcţii a clasei de ba)ă" Te#"ul Pro$ramului: 6include 7iostream8 6include 7stdlib"h8 6include 7conio"h8 6include 7cstring8 using namespace std, class om 9 char post, public: om139 post;<<,=, om1char3, om1om>3, ?om139delete@ post,=, void setBpost1char3, char getBpost13, friend ostream> operator 771ostream >*om>3, friend istream> operator 881istream >*om>3, =, om::om1char post3:post1ne char@strlen1post3D&39 strcp1this48post*post3, =, om::om1om>ob+39 if1this48postF;!U3 delete@ this48post, this48post ; ne char@strlen1ob+"post3D&, strcp1this48post*ob+"post3, =,
void om::setBpost1char post39 if1this48postF;!U3delete@this48post, this48post;ne char@strlen1post3D&,
strcp1this48post*post3, =, char om::getBpost139 return post, =,
istream> operator 881istream> in*om> ob+39 char buff@&%%, in88buff, ob+"setBpost1buff3, return in, = ostream> operator 771ostream> out*om>ob+39 out77
operator ; 1coloborator>3, friend ostream> operator 771ostream >*coloborator>3, friend istream> operator 881istream >*coloborator>3, =, coloborator::coloborator1float salariu3:salariu1salariu39=, coloborator> coloborator:: operator ; 1coloborator>ob+39
this48setBpost1ob+"getBpost133, this48salariu;ob+"salariu,
return this, =, istream> operator 881istream> in*coloborator> ob+39 char buff@&%%, cout77<.ati postul omului: <77endl, in88buff, ob+"setBpost1buff3, cout77<.ati salariul omului: <77endl, in88ob+"salariu, return in, = ostream> operator 771ostream> out*coloborator>ob+39 out77
cout77c, cout77<nColaborator:<77endl, cout77c&, cout77<nAtribuire<77endl,
c;c&, cout77
b3 .e creat clasa carte* care conţine grad (i culoare" Cartea poate fi /ntoarsă (i deschisă" Creaţi clasa - butuc de crţi* a cărţii pe care o conţine" Creaţi două clase derivate de la butuc de cărţi* /n una cărţile pot fi scoase numai /ntr4o ordine* iar /n alta - aleator" Te#"ul Pro$ramului: 6include 7iostream8 6include 7time"h8 6include 7cstring8 6include 7indos"h8 using namespace std, class blocKBbooKs 9 int tpe, public: blocKBbooKs139 tpe;%,=, blocKBbooKs1int3, void setBtpe1int3, int getBtpe13, friend ostream> operator 771ostream >*blocKBbooKs>3, friend istream> operator 881istream >*blocKBbooKs>3, =, blocKBbooKs::blocKBbooKs1int blocKBbooKs::blocKBbo oKs1int tpe3:tpe1tpe39=, void blocKBbooKs::setBtpe1int tpe39this48tpe;tpe,=, int blocKBbooKs::getBtpe139 return tpe,=, istream> operator 881istream> in*blocKBbooKs> ob+39 int temp, cout77<.ati tipul cartii1%4intoarsa * &4deschisa3: <, in88temp, if11temp;;%3LL1temp;;&339 ob+"setBtpe1temp3, = else 9cout77 operator 771ostream> 771ostre am> out*blocKBbooKs>ob+39
if11ob+"tpe;;%339 out77 operator 771ostream >*booK>3, friend istream> operator 881istream >*booK>3, =,
void booK::setBgrade1char grade39 =,
if1this48gradeF;!U3delete@this48grade, this48grade;ne char@strlen1grade3D&, strcp1this48grade*grade3,
void booK::setBcolor1char color39 if1this48colorF;!U3delete@this48color, this48color;ne char@strlen1color3D&, strcp1this48color*color3, =,
char booK::getBgrade139 return grade,=,
char booK::getBcolor139 return color,=, istream> operator 881istream> in*booK> ob+39
char temp&@&%%*temp$@&%%, cout77<.ati gradul cartii: <77endl, in88temp&, cout77<.ati culoarea cartii: <77endl, in88temp$, ob+"setBgrade1temp&3, ob+"setBcolor1temp$3, return in,
= ostream> operator 771ostream> out*booK>ob+39
out77<radul cartii: <77ob+"getBgrade1377endl, out77 operator 771ostream >*postBorder>3, friend istream> operator 881istream >*postBorder>3, =,
istream> operator 881istream> in*postBorder> ob+39 char temp$@&%%*tempN@&%%,
int temp&, cout77<.ati tipul cartii1%4intoarsa * &4deschisa3: <, in88temp&, if11temp&;;%3LL1temp&;;&339 ob+"setBtpe1temp&3, = else 9cout77
in88temp$, ob+"setBgrade1temp$3, cout77<.ati culoarea cartii: <77endl,
in88tempN, ob+"setBcolor1tempN3, return in,
= ostream> operator 771ostream> out*postBorder>ob+39
if11ob+"getBtpe13;;%339 out77
= out77<radul cartii: <77ob+"getBgrade1377endl, out77
class postBrandom:public booK 9 public: friend ostream> operator 771ostream >*postBrandom>3, friend istream> operator 881istream >*postBrandom>3, =, ostream> operator 771ostream> 771ostre am> out*postBrandom>ob+39 out77
cout77<.ati datele pentru cartea &<77endl, cin88p&, cout77<.ati datele pentru cartea $<77endl, cin88p$, postBorder p@$;9p&*p$=, cout77endl77
Concluie