研究生本科生的创建C++链表
2015-06-16 17:45
507 查看
#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; } }
<img src="https://img-blog.csdn.net/20150616174529583?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVsbG93b3JsZDEyNzA0MjQ3ODk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- [C/C++]反转链表
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++中拷贝构造函数的应用详解
- C++中引用(&)的用法与应用实例分析
- C++使用CriticalSection实现线程同步实例
- C++智能指针实例详解