Advertisement
madalinaradu

POO persoana student

May 27th, 2019
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.01 KB | None | 0 0
  1. #include<iostream>
  2. #include<string.h>
  3. using namespace std;
  4. # define MAX 50
  5.  
  6. class Persoana {
  7. protected:
  8.     char *nume;
  9.     int varsta;
  10. public:
  11.     Persoana(const char *nume="", int varsta=0);
  12.     Persoana(const Persoana &p);
  13.     ~Persoana();
  14.     void setNume(const char *nume);
  15.     Persoana &operator =(const Persoana &p);
  16.     friend istream& operator >>(istream& in, Persoana &p);
  17.     friend ostream& operator <<(ostream& out, const Persoana &p);
  18.  
  19. };
  20.  
  21. Persoana::Persoana(const char *nume, int varsta) {
  22.     this->nume=new char[strlen(nume)+1];
  23.     strcpy(this->nume, nume);
  24.     this->varsta=varsta;
  25. }
  26. Persoana::Persoana(const Persoana &p) {
  27.     this->nume=new char[strlen(p.nume)+1];
  28.     strcpy(this->nume, p.nume);
  29.     this->varsta=p.varsta;
  30. }
  31. Persoana::~Persoana() {
  32.     delete[]nume;
  33. }
  34.  
  35. void Persoana::setNume(const char *nume) {
  36.     if(strlen(this->nume)<strlen(nume)) {
  37.         ///verificam ce camp este mai mare-cel al numelui actual sau al lui p, eventual stergem pe cel curent si realocam
  38.         delete []this->nume;
  39.         this->nume=new char[strlen(nume)];
  40.     }
  41.     strcpy(this->nume, nume);
  42. }
  43. Persoana& Persoana::operator =(const Persoana &p) {
  44.  
  45.     if(this!=&p) {
  46.         setNume(p.nume);
  47.         this->varsta=p.varsta;
  48.     }
  49.     return *this;
  50. }
  51. istream& operator >>(istream& in, Persoana &p) { ///p nu este pointer, deci se scrie p.nume, p.varsta
  52.     char temp[100];
  53.     cout<<"Nume:";
  54.     in>>temp;
  55.     p.setNume(temp);
  56.     cout<<"Varsta:";
  57.     in>>p.varsta;
  58.     return in;
  59. }
  60. ostream& operator <<(ostream& out, const Persoana &p) {
  61.     out<<"----Persoana----"<<endl;
  62.     out<<"Nume:" << p.nume<<endl;
  63.     out<<"Varsta:" << p.varsta<<endl;
  64.     return out;
  65. }
  66.  
  67.  
  68. class Student:public Persoana {
  69. protected:
  70.     int an;
  71.     char *specializarea;
  72. public:
  73.     Student(const char *nume="", int varsta=0, int an=0,const char *specializarea="");
  74.     Student(const Student &s);
  75.     ~Student();
  76.     void setSpecializarea(const char *specializarea);
  77.     Student &operator =(const Student &s);
  78.     friend istream& operator >>(istream& in, Student &s);
  79.     friend ostream& operator <<(ostream& out, const Student &s);
  80. };
  81.  
  82. Student::Student(const char *nume, int varsta, int an, const char *specializarea): Persoana(nume, varsta) {
  83.     this->an=an;
  84.     this->specializarea=new char[strlen(specializarea)+1];
  85.     strcpy(this->specializarea, specializarea);
  86. }
  87.  
  88. Student::Student(const Student &s):Persoana(s) {
  89.     this->an=s.an;
  90.     this->specializarea=new char[strlen(s.specializarea)+1];
  91.     strcpy(this->specializarea, s.specializarea);
  92. }
  93. Student::~Student() {
  94.     delete[] specializarea;
  95. }
  96. void Student::setSpecializarea(const char *specializarea) {
  97.     if(strlen(this->specializarea)<strlen(specializarea)) {
  98.         delete []this->specializarea;
  99.         this->specializarea=new char[strlen(specializarea)];
  100.     }
  101.     strcpy(this->specializarea, specializarea);
  102. }
  103. Student& Student::operator =(const Student &s) {
  104.     if(this!=&s) {
  105.         Persoana::operator=(s);//copiaza numele si varsta
  106.         this->an=s.an;
  107.         setSpecializarea(s.specializarea);
  108.     }
  109.     return *this;
  110. }
  111. istream& operator >>(istream& in, Student &s) {
  112.     in>>(Persoana&) s; //citeste pe s ca fiind o persoana adica citeste nume si varsta
  113.     cout<<"An:";
  114.     in>>s.an;
  115.     char temp[100];
  116.     cout<<"Specializarea:";
  117.     in>>temp;
  118.     s.setSpecializarea(temp);
  119.     return in;
  120. }
  121. ostream& operator <<(ostream& out, const Student &s) {
  122.     out<<"----Student----"<<endl;
  123.     out<<"Nume:" << s.nume<<endl;
  124.     out<<"Varsta:" << s.varsta<<endl;
  125.     out<<"An:"<<s.an<<endl;
  126.     out<<"Specializarea:"<<s.specializarea<<endl;
  127.     return out;
  128. }
  129.  
  130. int main() {
  131.     Student p;
  132.     cin>>p;
  133.     cout<<p;
  134.  
  135.     Persoana a1("Ana", 19);
  136.     cout<<a1;
  137.     Persoana a2("Maria", 21);
  138.     cout<<a2;
  139.     Persoana a3=a1;
  140.     cout<<a3;
  141.     Student s1("Ana",19, 1, "UMF");
  142.     cout<<s1;
  143.     Student s2("Andrei",20, 2, "Info");
  144.     cout<<s2;
  145.     Student s3;
  146.     s3=s2;
  147.     cout<<s3;
  148.     return 0;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement