研究生类
#include<iostream>
#include<string>
using namespace std;
class Student
{
public: virtual void get()=0; virtual void display()=0; string name; int num;
};
class UGraduate :public Student//本科生
{
public: void get() { cout << "姓名:"; cin >> name; cout << "學(xué)號(hào):"; cin >> num; cout << "班級(jí)號(hào):"; cin >> classnum; } void display();
private: int classnum;
};
class Graduate :public Student//研究生
{
public: void get() { cout << "姓名:"; cin >> name; cout << "學(xué)號(hào):"; cin >> num;; cout << "導(dǎo)師姓名:"; cin >> Tutor; } void display();
private: string Tutor;
};
void UGraduate::display()
{ cout << "姓名:" << name; cout << "學(xué)號(hào):"<< num; cout << "班級(jí)號(hào):" <<classnum<<endl;
}
void Graduate::display()
{ cout << "姓名:"<< name; cout << "學(xué)號(hào):"<< num; cout << "導(dǎo)師姓名:"<<Tutor;
}
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; UGraduate U; Graduate G; SList<Student> List; for (;;) { cout << "創(chuàng)建學(xué)生:類(lèi)型(U)本科生,(G)研究生,(E)結(jié)束:"; cin >> c; if (c == 'E'){ cout << "銷(xiāo)毀鏈表."<<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 << "輸入無(wú)效請(qǐng)重新輸入:" << endl; } List.Print(); List.Delete(); List.Delete(); return 0;
}
總結(jié)
- 上一篇: Android 实现倒计时动画效果
- 下一篇: 快乐学习中