#include<iostream>
#include<string>
using namespace std;
class data
{
protected:
char *name;
public:
data(char *name);
data();
~data();
};
class teacher :protected data
{
protected:
int sal;
public:
teacher(char *name, const int &sal);
teacher();
~teacher();
void print();
};
class student :protected data
{
protected:
int id;
public:
student(char *name, const int &id);
student();
~student();
void print();
};
class postgrad : protected student
{
protected:
char *dn;
public:
postgrad(char *name, const int &id, char *dn);
postgrad();
~postgrad();
void print();
};
class tpost : protected teacher, protected postgrad
{
public:
tpost(char *name, const int &id, char *dn, const int &sal);
tpost();
~tpost();
void print();
};
data::data()
{}
data::data(char *name)
{
this->name = new char[strlen(name) + 1];
strcpy(this->name, name);
}
data::~data()
{
delete[]name;
}
teacher::teacher()
{}
teacher::teacher(char *name, const int &sal) :data(name)
{
this->sal = sal;
}
teacher::~teacher()
{}
void teacher::print()
{
cout << name << " " << sal << endl;
}
student::student()
{}
student::student(char *name, const int &id):data(name)
{
this->id = id;
}
student::~student()
{}
void student::print()
{
cout << name << " " << id << endl;
}
postgrad::postgrad()
{}
postgrad::postgrad(char *name, const int &id, char *dn) :student(name, id)
{
this->dn = new char[strlen(dn) + 1];
strcpy(this->dn, dn);
}
postgrad::~postgrad()
{
delete[]dn;
}
void postgrad::print()
{
cout << name << " " << id << " " << dn << endl;
}
tpost::tpost()
{}
tpost::tpost(char *name, const int &id, char *dn, const int &sal):postgrad(name,id,dn)
{
this->sal = sal;
}
tpost::~tpost()
{}
void tpost::print()
{
cout << student::name << " " << id << " " << dn << " " << sal << endl;
}
void print(teacher &t, student &s, postgrad &p, tpost &tp)
{
t.print();
s.print();
p.print();
tp.print();
}
int main()
{
teacher t("nm", 1000);
student s("aaaa", 01);
postgrad p("dd", 02, "pc");
tpost tp("ee", 03, "ad", 9000);
print(t, s, p, tp);
return 0;
}