Ex de Derivare
-
Upload
florinhorop -
Category
Documents
-
view
214 -
download
0
Transcript of Ex de Derivare
7/23/2019 Ex de Derivare
http://slidepdf.com/reader/full/ex-de-derivare 1/10
Adresa char *str int nr
Persoana Adresa adr char* nume
Angajat +salariu
agregare has a
derivare is a
Exemplu de reutilizarea codului prin agregare si derivare
7/23/2019 Ex de Derivare
http://slidepdf.com/reader/full/ex-de-derivare 2/10
#include <iostream>using namespace std;
class Adresa { private char* str;
int nr;
pu!lic
Adresa"{$ %%necesar la crearea o!iectelor de tip Persoana
Adresa"char* c& int nnr"n %%necesar in constructorul din Persoana%%se apeleaza pseudoconstructorul pentru nr de tip int;
%%pseudoconstructorii se 'olosesc pentru initializarea tipurilor dedate de !aza {
str(ne) char"strlen"c+,; strcp-"str&c;
$
Adresa"const Adresa.p%%se 'oloseste la crearea de o!iecte de tip Persoana
{ str(ne) charstrlen"p/str+,; strcp-"str&p/str;
nr(p/nr;%%sau *this(p; %% 'olosesc operator( implementat pentru Adresa
7/23/2019 Ex de Derivare
http://slidepdf.com/reader/full/ex-de-derivare 3/10
Adresa. operator("const Adresa .p { %%in Persoana se 'oloseste atri!uirea de o!iecte de tip Adresa
i'"this0(.p {
i' "0str delete , str; str(ne) charstrlen"p/str+,; strcp-"str&p/str; nr(p/nr;
$ return *this;
$ 'riend ostream. operator<<"ostream .dev&const Adresa .p
{ %% in operatorul de << din Persoana se 'oloseste operatorulde << din Adresa
dev<<12trada 1<<p/str<<endl;
dev<<13r/ 1<<p/nr<<endl<<endl; return dev; $
4Adresa"{
delete , str;$
7/23/2019 Ex de Derivare
http://slidepdf.com/reader/full/ex-de-derivare 4/10
class Persoana { protected Adresa adr; %%agregare char *nume;
pu!lic Persoana"{$ %%apel automat adr" Persoana"const Adresa .d& char* n:adr(d) %%construiesc atri!utadr de tip Adresa { nume( ne) charstrlen"n+,; %% alt'el se apelaautomat adr" strcp-"nume&n; $
Persoana"char* s& int nr& char* n:adr(s,nr) %%construiesc atri!utulde tip Adresa { nume( ne) charstrlen"n+,; strcp-"nume&n; $%% Persoana"const Persoana . p %% se apeleaza automat adr"
%% {%% adr = p/adr;%% nume( ne) charstrlen"p/nume+,;%% strcp-"nume&p/nume;%% $%%sau
Persoana"const Persoana . p:adr(p.adr) %%construiesc atri!utulde tip Adresa
7/23/2019 Ex de Derivare
http://slidepdf.com/reader/full/ex-de-derivare 5/10
Persoana. operator("const Persoana . p
{adr = p/adr;%%atri!uire intre o!iecte de tip Adresa 'olosind
Adresaoperator(nume( ne) charstrlen"p/nume+,;
strcp-"nume&p/nume; return *this; $
void a5s"{ cout<<13ume 1<<nume<<endl; cout<<1Adresa 1<<endl; cout<<adr; %%a5sare o!iect de tip Adresa 'olosind operator<< din
Adresa $%%sau se suprade5neste operator<<
4Persoana" {
delete , nume; $ %%se apeleaza automat destructorul din Adresa
6eutilizarecod
7/23/2019 Ex de Derivare
http://slidepdf.com/reader/full/ex-de-derivare 6/10
class Angajat:public Persoana { private
%%mosteneste toate atri!utele din Persoana si are in plus dou!le salariu;
pu!licAngajat"%%apel automat constructor Persoana"
{ $
Angajat(const Adresa &d, char* n,doubles):Persoana(d,n),salariu(s) //apelez constructorul clasei de baza Persoana, cu paraetrii !
"
Angajat(char* s, int nr, char* n, double sal):Persoana(s, nr,n),salariu(sal) ! "
Angajat(const Angajat & p):Persoana(p) //apel e#plicit
constructor copiere din Persoana !
7/23/2019 Ex de Derivare
http://slidepdf.com/reader/full/ex-de-derivare 7/10
Angajat& operator=(const Angajat & p)
!(Persoana&)(*this)=p$
// con%ertesc obiectul de la adresa lui this la tipul
de date Persoana& //olosesc operatorul de atribuire din clasaPersoana $ autoat p este //con%ertit la tipul de date debaza$ putea sa scriu si (Persoana)p$ salariu=p.salariu$ return *this$
"
%oid a's()! ((Persoana*)(this))a's()$ // il con%ertesc pe this la tipul de date Persoana* //apelez unctia a's din Persoana
//sau Persoana::a's()$ cout<<+alariu: <<salariu<<endl$ " $;
6eutilizarecod derivare
7/23/2019 Ex de Derivare
http://slidepdf.com/reader/full/ex-de-derivare 8/10
int main"{ //ideea
Persoana *c; Adresa a"1str1&7; Angajat ang"a&8ang1&7; c(.ang;
%%un pointer de tip Persoana poate sa pointeze catre o zona dememorie de tip Angajat
""Angajat*c9>a5s";%%convertesc ce gasesc la adresa la care pointeaza c 9 la un pointer de
tip Angajat %%apelez 'unctia de a5sare din clasa Angajat (> str& 7 ang 7
int n;
cin>>n;char *num(ne) char:,;
char *str(ne) char:,; int nr; dou!le sal;
!ool *t(ne) !ooln,;%%un vector in care memorez daca persoana e angajata sau nu
7/23/2019 Ex de Derivare
http://slidepdf.com/reader/full/ex-de-derivare 9/10
Persoana **evidenta(ne) Persoana*n,;%%un vector in care vreau sa stochez atat o!iecte de tip Persoana* cat siAngajat*
'or "int i(7;i<n;i++{ cout<<1Adaugati salariat sau nesalariat1; !ool tip;cin>>tip; ti,(tip; i' "tip((true { cout<<13ume 1; cin>>num;
cout<<12tr/ 1; cin>>str; cout<<13r/1; cin>>nr; cout<<12alariu/1; cin>>sal; e%identai-=ne Angajat(str,nr,nu,sal)$ $else {
cout<<13ume 1; cin>>num; cout<<12tr/ 1; cin>>str; cout<<13r/1; cin>>nr; e%identai-=ne Persoana(str,nr,nu)$ $
$
7/23/2019 Ex de Derivare
http://slidepdf.com/reader/full/ex-de-derivare 10/10
cout<<11<<endl; 'or "int i(7;i<n;i++ i' "ti,((true { ((Angajat*)(e%identai-))a's()$
cout<<11<<endl; $else { e%identai-a's()$
cout<<11<<endl; $
s-stem"1PA=2E1; return ;$