Sunteți pe pagina 1din 7

#include <iostream>

#include <iomanip>
#include <fstream>
using namespace std;
class animal_de_companie//Clasa de baza
{
private:
char* nume;
char* regn;
char* ordin;
int nr_ani;
int *nr_rase;
int vechime_specie;
public:
virtual void culoare()//functia virtuala
{
cout<<"culoarea animalului este nedefinita\n"<<endl;
}
animal_de_companie()//constructorul fara parametrii pentru clasa de baza
{
nume=NULL;
regn=NULL;
ordin=NULL;
nr_ani=0;
nr_rase=NULL;
vechime_specie=0;
cout<<"s-a apelat constructorul implicit"<<endl;
}
animal_de_companie(char*n, char* r,char* o,int n_a,int* n_r,int v_s)//constructorul cu
parametrii pentru clasa de baza
{
int * rase;
this->nume = new char[strlen(n) + 1];
strcpy(nume, n);
this->regn = new char[strlen(r) + 1];
strcpy(regn, r);
this->ordin = new char[strlen(o) + 1];
strcpy(ordin, o);
this->nr_ani=n_a;
/*this->nr_rase = new int[40];
this->nr_rase=v;*/
this->nr_rase=new int[12];
for(int i=0;i<12;i++)
this->nr_rase[i]=nr_rase[i];
this->vechime_specie=v_s;
cout<<"S-a apelat constructorul cu parametri"<<endl;
}
animal_de_companie(const animal_de_companie& a)//constructorul de copiere pentru clasa de
baza
{
this->nume = new char[strlen(a.nume) + 1];
strcpy(nume, a.nume);
this->regn = new char[strlen(a.regn) + 1];
strcpy(regn, a.regn);
this->ordin = new char[strlen(a.ordin) + 1];

strcpy(ordin, a.ordin);
this->nr_ani=a.nr_ani;
/*this->nr_rase = new int[40];
this->nr_rase=a.nr_rase;*/
this->nr_rase=new int[12];
for(int i=0;i<12;i++)
this->nr_rase[i]=a.nr_rase[i];
this->vechime_specie=a.vechime_specie;
cout<<"S-a apelat constructorul de copiere"<<endl;
}
~animal_de_companie()//destructorul pentru clasa de baza
{
delete[] this->nume;
delete[] this->regn;
delete[] this->ordin;
delete[] this->nr_rase;
cout<<endl<<"S-a apelat destructorul"<<endl;
}
animal_de_companie& operator=(animal_de_companie& s){
"=" pentru clasa de baza
delete[] nume;
delete[] this->regn;
delete[] this->ordin;
delete[] this->nr_rase;
this->nume=new char [strlen(s.nume)+1];
strcpy(nume,s.nume);
this->regn = new char[strlen(s.regn) + 1];
strcpy(regn, s.regn);
this->ordin = new char[strlen(s.ordin) + 1];
strcpy(ordin, s.ordin);
this->nr_ani=s.nr_ani;
/*this->nr_rase = new int[40];
this->nr_rase=s.nr_rase;*/
this->nr_rase=new int[12];
for(int i=0;i<12;i++)
this->nr_rase[i]=s.nr_rase[i];
this->vechime_specie=s.vechime_specie;
cout<<"S-a apelat operatorul ="<<endl;
return (* this);
cout<<"Operator ="<<endl;
}
//get-eri si set-eri pentru clasa de baza
char* getnume()
{
return nume;
}
void setnume(char* n)
{
if(nume!=NULL)
{
delete[] nume;
}
this->nume = new char[strlen(n) + 1];
strcpy(nume, n);
}
char* getregn()

// Supraincarcare operator

{
return regn;
}
void setregn(char* r)
{
if(regn!=NULL)
{
delete[] regn;
}
this->regn = new char[strlen(r) + 1];
strcpy(regn, r);
}
char* getordin()
{
return ordin;
}
void setordin(char* o)
{
if(ordin!=NULL)
{
delete[] ordin;
}
this->ordin = new char[strlen(o) + 1];
strcpy(ordin, o);
}
int getnr_ani()
{
return nr_ani;
}
void setnr_ani(float n_a)
{
nr_ani =n_a;
}
int getvechime_specie()
{
return vechime_specie;
}
void setvechime_specie(float v_s)
{
vechime_specie =v_s;
}
void setnr_rase(int*p)
{nr_rase=new int[10];
nr_rase=p;
}
int* getnr_rase()
{
return nr_rase;
}

friend istream& operator>>(istream&, animal_de_companie& a);

friend ifstream& operator>>(ifstream&, animal_de_companie& a);


friend ofstream& operator<<(ofstream&, animal_de_companie& a);
friend
friend
friend
friend
friend

istream& operator>>(istream&, animal_de_companie& a);


ostream& operator<<(ostream&, animal_de_companie a);
int operator+(animal_de_companie&, int);
int operator-(animal_de_companie&, int);
const animal_de_companie& operator++(animal_de_companie&);

friend class pisica;


friend class mamifer;
};
//operator +
int operator+(animal_de_companie& s, int x)
{
return s.nr_ani + x;
cout<<"s-a apelat operatorul +"<<endl;
}
//operator int operator-(animal_de_companie& s, int y)
{
return s.nr_ani - y;
cout<<"s-a apelat operatorul -"<<endl;
}
//operator++
const animal_de_companie& operator++(animal_de_companie& s)
{
s.nr_ani++;
return s;
cout<<"s-a apelat operatorul ++"<<endl;
}
//supraincaracari operatori
ostream& operator<<(ostream& iesire, animal_de_companie a)
{
iesire<<"Numele
:"<<a.nume<<endl<<"regn:"<<a.regn<<endl<<"ordin:"<<a.ordin<<endl<<"nr_ani:"<<a.nr_ani<<en
dl<<"vechime_specie:"<<a.vechime_specie<<endl;/*<<"nr_rase:";*/
{/*int i;
for(i=0; i<2;i++)
{
iesire<<" "<<a.nr_rase[i];
if (i==0)
iesire<<" nicio rasa";
}*/
return iesire;
}
}
istream& operator>>(istream& intrare, animal_de_companie& a)
{
cout<<"Nume: ";
char n[40];
intrare.getline(n, 40);
a.setnume(n);
cout<<"regn: ";
char r[40];
intrare.getline(r, 40);
a.setregn(r);

cout<<"ordin: ";
char o[40];
intrare.getline(o, 40);
a.setordin(o);
return intrare;
}
ifstream& operator>>(ifstream& f, animal_de_companie& a)
{
f.open("afisare.bin", ios::in|ios::_Nocreate);
if(f)
{
char n[10];
f>>n;
a.setnume(n);
char r[10];
f>>r;
a.setregn(r);
char o[10];
f>>o;
a.setordin(o);
int n_a;
f>>n_a;
a.setnr_ani(n_a);
int v_s;
f>>v_s;
a.setvechime_specie(v_s);
cout<<"s-a apelat citirea din fisier"<<endl;
}
f.close();
return f;
}
ofstream& operator<<(ofstream& f, animal_de_companie& a)
{
f.open("afisare.bin", ios::out);
if(f)
{
f<<"Nume: "<<a.nume<<endl;
f<<"Regn: "<<a.regn<<endl;
f<<"Ordin: "<<a.ordin<<endl;
f<<"Nr Ani: "<<a.nr_ani<<endl;
f<<"Vechime specie: "<<a.vechime_specie<<endl;
cout<<"s-a apelat scrierea in fisier"<<endl;
}
f.close();
return f;
}
class actiuni //clasa abstracta
{
virtual void spune_ceva() = 0;
virtual void executa_ceva() = 0;
};
//derivare
class pisica : private animal_de_companie,virtual public actiuni//clasa derivata

{ public:
virtual void spune_ceva()
{
cout<<"ham,Ham"<<endl;
}
virtual void executa_ceva()
{
cout<<"rostogolestete"<<endl;
}
char * nume_proprietar;
pisica() : animal_de_companie()//constructorul fara parametrii pentru clasa derivata
{
nume_proprietar=NULL;
cout<<"s-a apelat constructorul implicit pentru clasa derivata"<<endl;
}
pisica(char*n, char* r,char* o,int n_a,int* n_r,int v_s,char * n_p) :
animal_de_companie(n,r,o,n_a,n_r,v_s)//constructorul cu parametrii pentru clasa derivata
{
this->nume_proprietar=new char [strlen(n_p)+1];
strcpy (nume_proprietar, n_p);
cout<<"s-a apelat constructorul cu parametrii pentru clasa derivata"<<endl;
}
pisica(const pisica& p)//constructorul de copiere pentru clasa derivata
{
this->nume_proprietar = new char[strlen(p.nume_proprietar) + 1];
strcpy(nume_proprietar,p.nume_proprietar);
cout<<"S-a apelat constructorul de copiere pentru clasa derivata"<<endl;
}
~pisica()//destructorul pentru clasa derivata
{
delete[] this->nume_proprietar;
cout<<endl<<"S-a apelat destructorul pentru clasa derivata";
}
animal_de_companie operator=(const pisica& g)
{ // Supraincarcare operator "=" pentru clasa derivata
delete[] nume;
delete[] this->regn;
delete[] this->ordin;
delete[] this->nume_proprietar;
delete[] this->nr_rase;
this->nume_proprietar = new char[strlen(g.nume_proprietar) + 1];
strcpy(nume_proprietar,g.nume_proprietar);
cout<<"s-a apelat operatorul = pentru clasa derivata";
return (* this);
cout<<"Operator ="<<endl;
}
//functii virtuale redefinite
void culoare()
{
cout<<" culoarea pisicii este maro\n"<<endl;
}
char* get_nume_proprietar()
{
return nume_proprietar;
}

void set_nume_proprietar(char* n_p)


{
if(nume_proprietar!=NULL)
{
delete[] nume_proprietar;
}
this->nume_proprietar = new char[strlen(n_p) + 1];
strcpy(nume_proprietar, n_p);
}

};
void main()
{
animal_de_companie c;
int e[1]={19};
animal_de_companie b ("caine","animalia","carnivora",25,e,1500);
ofstream x;
x<<b;
animal_de_companie h ("papagal","animalia","Psittaciformes",14,e,1600);
cout<<"Rezultat:"<<h+100<<endl;
cout<<"Rezultat:"<<h-100<<endl;
cout<<"Rezultat:"<<++h<<endl;
ifstream g;
g>>h;
animal_de_companie j ("iguana","as","s",18,e,1900);
animal_de_companie d=b;
animal_de_companie f;
f=b;
pisica();
pisica a ("mata","animalia","carnivora",10,e,1000,"ion");
cout<<b;
cin.get();
}