用一个异质链表(多态性)保存学生数据

来源:互联网 发布:临沂软件开发吧 编辑:程序博客网 时间:2024/05/20 09:43
#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;}

0 0
原创粉丝点击