课堂作业
2015-06-02 06:20
357 查看
#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; }
相关文章推荐
- 有关于主外键
- Time to start my blog
- 菜鸟成长记1,软件工程大一经历
- Count and Say
- 3.Longest Substring without repeating characters
- 项目小结及难点复盘
- Longest Valid Parentheses
- iperf
- 如何测试写磁盘的速度?
- 无聊啊 Next Permutation
- Photoshop 标注图像
- js中字符串操作函数
- mysql 查询 字段的类型
- Divide Two Integers
- 从底层理解Python的执行
- C++ 常用代码001 IsValidFileName VC/MFC 判断有效文件名
- BUG现象与对应0003 全局数据结构复杂多线程中应该被复制使用
- Boyer-Moore: Implement strStr() --- find a needle in a haystack
- C/C++内存分配
- [1]_技术研发 - 七年之痒