#include<iostream>
#include<string>
#include<fstream>
using namespace std;
class Student
{
public:
Student();
Student(string n,string nu,char s,int sc):name(n),number(nu),sex(s),score(sc){}
Student *next;
string name;
string number;
char sex;
int score;
virtual ~Student();
};
typedef Student NODE;
typedef Student *LIST;
typedef LIST PNODE;
class Undergrad:public Student
{
public:
Undergrad();
Undergrad(string n,string nu,char s,int sc,string m):Student(n,nu,s,sc),major(m){}
string major;
friend ostream &operator<<(ostream &,const Undergrad &);
virtual ~Undergrad();
};
class Graduate:public Undergrad
{
public:
Graduate();
Graduate(string n,string nu,char s,int sc,string m,string t):Undergrad(n,nu, s,sc, m),teacher(t){}
string teacher;
friend ostream &operator<<(ostream &,const Graduate &);
virtual ~Graduate();
};
ostream &operator<<(ostream &output,const Undergrad &t)
{
output<<"name:"<<t.name<<'\n'<<"number:"<<t.number<<'\n'<<"sex:"<<t.sex<<'\n'<<"score:"<<t.score<<'\n'<<"major:"<<t.major<<endl;
return output;
}
ostream &operator<<(ostream &output,const Graduate &t)
{
output<<"name:"<<t.name<<'\n'<<"number:"<<t.number<<'\n'<<"sex:"<<t.sex<<'\n'<<"score:"<<t.score<<'\n'<<"major:"<<t.major<<"teacher:"<<t.teacher<<endl;
return output;
}
LIST Creat_List()
{
PNODE p,tail;
PNODE list= new NODE;
list->next=NULL;
tail = list;
int choose;
int sc;
string n,nu,m,t;
char s;
cout<<"ÇëÊäÈëÄãÏë´´½¨µÄѧÉúÀàÐÍ£º1):±¾¿Æ 2) :Ñо¿Éú 3) :½áÊø"<<endl;
cin>>choose;
switch(choose)
{
case 1:
cout<<"name:"<<'\t'<<"number:"<<'\t'<<"sex:"<<'\t'<<"score:"<<'\t'<<"major:"<<endl;
cin>>n>>nu>>s>>sc>>m;
p=new Undergrad(n,nu,s,sc,m);
case 2:
cout<<"name:"<<'\t'<<"number:"<<'\t'<<"sex:"<<'\t'<<"score:"<<'\t'<<"major:"<<"teacher:"<<endl;
p=new Graduate(n,nu,s,sc,m,t);
case 3:
break;
}
if(p)
{
tail->next = p;
tail = p;
tail->next = NULL;
}
p=NULL;
return list;
}
void destroyList(LIST list)
{
PNODE head=list,p;
Graduate *pg;
Undergrad *pu;
cout<<"Ïú»ÙÁ´±í"<<endl;
if(!head) return;
while((p=head)!=NULL)
{
if(pg=dynamic_cast<Graduate*>(p))
cout<<*pg;
else if(pu=dynamic_cast<Undergrad*>(p))
cout<<*pu;
head=p->next;
delete p;
}
}
int main()
{
LIST list =Creat_List();
destroyList(list);
return 0;
}
研究生与本科生
最新推荐文章于 2021-07-28 22:36:23 发布