课堂作业

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值