Persoana Adresa Adr Char Nume: Agregare Has A Derivare Is A
Persoana Adresa Adr Char Nume: Agregare Has A Derivare Is A
Persoana
Adresa adr
char* nume
derivare
Angajat
+salariu
agregare
has a
is a
Adresa
char *str
int nr
#include <iostream>
using namespace std;
class Adresa {
private: char* str;
int nr;
public:
Adresa(){} //necesar la crearea obiectelor de tip Persoana
Adresa(char* c, int n):nr(n) //necesar in constructorul din Persoana
//se apeleaza pseudoconstructorul pentru nr de tip int;
//pseudoconstructorii se folosesc pentru initializarea tipurilor de
date de baza
{
str=new char[(strlen(c))+1];
strcpy(str,c);
}
Adresa(const Adresa&p)
//se foloseste la crearea de obiecte de tip Persoana
{
str=new char[strlen(p.str)+1];
strcpy(str,p.str);
nr=p.nr;
//sau:
*this=p; // folosesc operator= implementat pentru Adresa
class Persoana {
protected: Adresa adr; //agregare
char *nume;
public: Persoana(){}
//apel automat adr()
Persoana(const Adresa &d, char* n):adr(d) //construiesc atributu
adr de tip Adresa
{
nume= new char[strlen(n)+1];
// altfel se apela
automat adr()
strcpy(nume,n);
}
Persoana(char* s, int nr, char* n):adr(s,nr) //construiesc atributul
de tip Adresa
{
nume= new char[strlen(n)+1];
strcpy(nume,n);
}
//
Persoana(const Persoana & p)
// se apeleaza automat adr()
//
{
//
adr = p.adr;
//
nume= new char[strlen(p.nume)+1];
//
strcpy(nume,p.nume);
//
}
//sau:
Persoana(const Persoana & p):adr(p.adr) //construiesc atributul a
de tip Adresa
Reutilizare
cod
int main()
{
//ideea
Persoana *c;
Adresa a("str",10);
Angajat ang(a,ang",10);
c=∠
//un pointer de tip Persoana poate sa pointeze catre o zona de
memorie de tip Angajat
((Angajat*)c)->afis();
//convertesc ce gasesc la adresa la care pointeaza c - la un pointer de
tip Angajat
//apelez functia de afisare din clasa Angajat => str, 10 ang 10
int n;
cin>>n;
char *num=new char[2];
char *str=new char[2];
int nr;
double sal;
bool *t=new bool[n];
//un vector in care memorez daca persoana e angajata sau nu
cout<<"_______________________________"<<endl;
for (int i=0;i<n;i++)
if (t[i]==true) {
((Angajat*)(evidenta[i]))->afis();
cout<<"____________________"<<endl;
}else {
evidenta[i]->afis();
cout<<"____________________"<<endl;
}
system("PAUSE");
return 1;
}