Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<string.h>
- using namespace std;
- # define MAX 50
- class Persoana {
- protected:
- char *nume;
- int varsta;
- public:
- Persoana(const char *nume="", int varsta=0);
- Persoana(const Persoana &p);
- ~Persoana();
- void setNume(const char *nume);
- Persoana &operator =(const Persoana &p);
- friend istream& operator >>(istream& in, Persoana &p);
- friend ostream& operator <<(ostream& out, const Persoana &p);
- };
- Persoana::Persoana(const char *nume, int varsta) {
- this->nume=new char[strlen(nume)+1];
- strcpy(this->nume, nume);
- this->varsta=varsta;
- }
- Persoana::Persoana(const Persoana &p) {
- this->nume=new char[strlen(p.nume)+1];
- strcpy(this->nume, p.nume);
- this->varsta=p.varsta;
- }
- Persoana::~Persoana() {
- delete[]nume;
- }
- void Persoana::setNume(const char *nume) {
- if(strlen(this->nume)<strlen(nume)) {
- ///verificam ce camp este mai mare-cel al numelui actual sau al lui p, eventual stergem pe cel curent si realocam
- delete []this->nume;
- this->nume=new char[strlen(nume)];
- }
- strcpy(this->nume, nume);
- }
- Persoana& Persoana::operator =(const Persoana &p) {
- if(this!=&p) {
- setNume(p.nume);
- this->varsta=p.varsta;
- }
- return *this;
- }
- istream& operator >>(istream& in, Persoana &p) { ///p nu este pointer, deci se scrie p.nume, p.varsta
- char temp[100];
- cout<<"Nume:";
- in>>temp;
- p.setNume(temp);
- cout<<"Varsta:";
- in>>p.varsta;
- return in;
- }
- ostream& operator <<(ostream& out, const Persoana &p) {
- out<<"----Persoana----"<<endl;
- out<<"Nume:" << p.nume<<endl;
- out<<"Varsta:" << p.varsta<<endl;
- return out;
- }
- class Student:public Persoana {
- protected:
- int an;
- char *specializarea;
- public:
- Student(const char *nume="", int varsta=0, int an=0,const char *specializarea="");
- Student(const Student &s);
- ~Student();
- void setSpecializarea(const char *specializarea);
- Student &operator =(const Student &s);
- friend istream& operator >>(istream& in, Student &s);
- friend ostream& operator <<(ostream& out, const Student &s);
- };
- Student::Student(const char *nume, int varsta, int an, const char *specializarea): Persoana(nume, varsta) {
- this->an=an;
- this->specializarea=new char[strlen(specializarea)+1];
- strcpy(this->specializarea, specializarea);
- }
- Student::Student(const Student &s):Persoana(s) {
- this->an=s.an;
- this->specializarea=new char[strlen(s.specializarea)+1];
- strcpy(this->specializarea, s.specializarea);
- }
- Student::~Student() {
- delete[] specializarea;
- }
- void Student::setSpecializarea(const char *specializarea) {
- if(strlen(this->specializarea)<strlen(specializarea)) {
- delete []this->specializarea;
- this->specializarea=new char[strlen(specializarea)];
- }
- strcpy(this->specializarea, specializarea);
- }
- Student& Student::operator =(const Student &s) {
- if(this!=&s) {
- Persoana::operator=(s);//copiaza numele si varsta
- this->an=s.an;
- setSpecializarea(s.specializarea);
- }
- return *this;
- }
- istream& operator >>(istream& in, Student &s) {
- in>>(Persoana&) s; //citeste pe s ca fiind o persoana adica citeste nume si varsta
- cout<<"An:";
- in>>s.an;
- char temp[100];
- cout<<"Specializarea:";
- in>>temp;
- s.setSpecializarea(temp);
- return in;
- }
- ostream& operator <<(ostream& out, const Student &s) {
- out<<"----Student----"<<endl;
- out<<"Nume:" << s.nume<<endl;
- out<<"Varsta:" << s.varsta<<endl;
- out<<"An:"<<s.an<<endl;
- out<<"Specializarea:"<<s.specializarea<<endl;
- return out;
- }
- int main() {
- Student p;
- cin>>p;
- cout<<p;
- Persoana a1("Ana", 19);
- cout<<a1;
- Persoana a2("Maria", 21);
- cout<<a2;
- Persoana a3=a1;
- cout<<a3;
- Student s1("Ana",19, 1, "UMF");
- cout<<s1;
- Student s2("Andrei",20, 2, "Info");
- cout<<s2;
- Student s3;
- s3=s2;
- cout<<s3;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement