用一个异质链表(多态性)保存学生数据
2015-06-23 18:56
351 查看
#include<iostream> #include<string> using namespace std; class Student { public: virtual void get()=0; virtual void display()=0; string name; string num; }; class UnderGrad :public Student { public: void get() { cout << "姓名:"; cin >> name; cout << "学号:"; cin >> num; cout << "班级号:"; cin >> classnum; } void display(); private: string classnum; }; class Graduate :public Student { public: void get() { cout << "姓名:"; cin >> name; cout << "学号:"; cin >> num; cout << "导师姓名:"; cin >> tutor; } void display(); private: string tutor; }; void UnderGrad::display() { cout << "姓名"<<"\t"<<"学号"<<"\t"<<"班级"<<endl; cout<<name<<"\t"<<num<<"\t"<<classnum<<endl; } void Graduate::display() { cout << "姓名"<<"\t"<<"学号"<<"\t"<<"导师姓名"<<endl; cout<<name<<"\t"<<num<<"\t"<<tutor<<endl; } template <typename T> class SList; template <typename T> class Node { friend class SList<T>; public: Node(T *data) :data(data), next(NULL){} private: T *data; Node<T> *next; }; template < typename T> class SList { public: SList():head(NULL), tail(NULL){} void Insert(T *newNode) { Node<T> *t = new Node<T>(newNode); if (!head) { head = tail = t; length++; } else { tail->next = t; tail = t; length++; } } void Delete() { Node<T> *t = head; head = head->next; delete t; } void Print() { if (!head) { cout << "链表空..." << endl; return; } Node<T> *t; for (t = head; t; t = t->next) { t->data->display(); } } private: int length; Node<T> *head; Node<T> *tail; }; int main() { char c; UnderGrad U; Graduate G; SList<Student> List; for (;;) { cout << "创建学生:类型(U)本科生,(G)研究生,(E)结束:"; cin >> c; if (c == 'E'){ cout << "销毁链表."<<endl; break; } else if (c == 'U' || c == 'G') switch (c) { case 'U':U.get(); List.Insert(&U); break; case 'G':G.get(); List.Insert(&G); break; default: break; } else cout << "输入无效请重新输入:" << endl; } List.Print(); List.Delete(); List.Delete(); return 0; }
相关文章推荐
- Android---57---传感器
- AJAX小练习,防止以后忘记
- 如何做移动O2O产品的运营推广
- /etc/profile ~/.bash_profile ~/.bashrc /etc/bashrc文件调用顺序解析
- Eclipse-jsp
- 深度剖析 函数指针
- Time Date DateTime的继承与派生及运算符重载
- 2015第26周二
- 记一次nginx无法访问的问题
- Flashback Data Archive ( Oracle Total Recall ) introduced in 11g
- LabWindows/CVI 下载
- Android基本控件之TextView和EditView
- 关于ping以及TTL的分析
- 2015半年总结,我要实现的个人目标
- 第七章
- Quick Reference:php5 Xdebug 代码覆盖分析
- android中关于tools:context="activity name"解惑
- 第六章
- 第五章
- hdu 5215 Cycle