ex de derivare

10
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

Upload: florinhorop

Post on 17-Feb-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 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

Page 2: Ex de 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

Page 3: Ex de Derivare

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;$

Page 4: Ex de Derivare

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

Page 5: Ex de Derivare

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

Page 6: Ex de Derivare

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  !

Page 7: Ex de Derivare

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

Page 8: Ex de 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

Page 9: Ex de Derivare

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)$  $ 

$

Page 10: Ex de Derivare

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 ;$