#include<iostream>
#include<string>
using namespace std;
class Student
{
public:
virtual void display(){};
string name;
string number;
Student *next;
Student();
Student(const string &na, const string&no):name(na),number(no){}
virtual ~Student();
};
typedef Student NODE;
typedef Student *LIST;
typedef LIST PNODE;
Student::Student()
{
}
Student::~Student()
{
}
class Graduate : public Student
{
public:
string tutor;
virtual void display();
Graduate();
Graduate(const string& na, const string& no,const string& tn):Student(na,no),tutor(tn){}
virtual ~Graduate();
friend ostream& operator<<(ostream& os, const Graduate& stu );
};
Graduate::Graduate()
{
}
Graduate::~Graduate()
{
}
void Graduate::display()
{
}
ostream& operator<<(ostream&os, const Graduate& stu )
{
os<<"研究生:"<<stu.name<<",\t学号: "<<stu.number<<",\t导师:"<<stu.tutor<<endl;
return os;
}
class UnderGrad : public Student
{
public:
UnderGrad();
UnderGrad(const string&na, const string&no):Student(na,no){}
virtual ~UnderGrad();
friend ostream& operator<<(ostream&os, const UnderGrad& stu);
};
UnderGrad::UnderGrad()
{
}
UnderGrad::~UnderGrad()
{
}
ostream& operator<<( ostream&os, const UnderGrad& stu )
{
os<<"本科生:"<<stu.name<<",\t学号: "<<stu.number<<endl;
return os;
}
LIST createList()
{
char c='y';
PNODE p,tail;
PNODE list= new NODE;
string nm,no,tname;
list->next=NULL;
tail = list;
do{
cout<<"创建学生,类型(U)本科生,(G)研究生,(E)结束:";
cin>>c;
if(c=='E'||c=='e')
break;
switch(c)
{
case 'u':case 'U':
cout<<"本科生\n学号:";
cin>>no;
cout<<"姓名:";
cin>>nm;
p= new UnderGrad(nm, no);
break;
case 'g':case 'G':
cout<<"研究生\n学号:";
cin>>no;
cout<<"姓名:";
cin>>nm;
cout<<"导师姓名:";
cin>>tname;
p = new Graduate(nm,no,tname);
break;
default:
cout<<"类型错误!"<<endl;
break;
}
if(p)
{
tail->next = p;
tail = p;
tail->next = NULL;
}
p=NULL;
}
while(1);
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 =createList();
destroyList(list);
return 0;
}
课堂作业
最新推荐文章于 2023-09-09 20:13:12 发布