这样说的话可能有些不清楚,具体情况如下:
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
class Score
{
protected:
unsigned int Score_count;
float *score;
float totalscore;
public:
Score(unsigned int count);
void Caculate_sum_score();
float Get_sum_score();
float Get_score(unsigned int a);
unsigned int Get_count();
bool Set_score(unsigned int No, float value);//设置指定No的成绩为value
void display(ostream&);
};
class Student :public Score
{
protected:
unsigned long int ID;
string Name;
string Major;
char Gender;
int Grade;
int Classes;
unsigned int C_seq;//班级排名
unsigned int S_seq;//校级排名
Score *score;
public:
Student(unsigned long int id, string name, char gender, string major, int grade, int clas, int score_count = 3) ;
bool Set_name(string name);
void Set_gender(char gender);
void Set_clas(int clas);
bool Set_cseq(int seq);
bool Set_sseq(int seq);
unsigned long int Get_id();
string Get_name();
char Get_gender();
string Get_major();
int Get_grade();
int Get_clas();
};
template <class T>
class Class
{
protected:
vector<T *> class_mates;//学生向量
unsigned int member_count;//学生数
int class_No;
public:
Class(int classno);
int Get_Sign();
vector<T *> *Get_mates();
void sort_class_mates();//全班按总成绩排序,并计算排名
void insert_mate(T* stu);//有序插入一个班级成员
T *delete_mate(unsigned long int id);//根据学号删除一个班级成员!!注意,只是从班级中删除指针,而对象用指针返回,需要后继处理!!
T *find_mates(unsigned long int id);//根据学号查找学生
list<T *> find_mates(string name);//根据姓名查找学生
void caculate_score(unsigned int No, float &max, float &min, float &avg);//计算编号为No的课程的最高成绩-0,最低成绩-1,平均成绩-2
void out_over_avg(unsigned int No);//输出编号为No的课程高于平均分的学生信息和数量
void out_failed(unsigned int No);//统计某班级某课程不及格学生名单及人数
void statistics_level(unsigned int No, int level[5]);//五级制,0-优,1-良,2-中,3-及格,4-不及格
void display(ostream &out = cout);
~Class();
};
class uStudent:public Student
{
public:
uStudent();
friend ostream & operator<<(ostream &out, uStudent & ust);
friend istream & operator>>(istream &in, uStudent & ust);
uStudent(unsigned long int id, string name, char gender, string major, int grade, int clas, int score_count);
};
class gStudent :public Student
{
protected:
string tutor;
string direction;
public:
gStudent(string tu,string dir);
friend ostream & operator<<(ostream &out, gStudent & gst);
friend istream & operator >> (istream &in,gStudent & gst);
gStudent(string tu, string dir, unsigned long int id, string name, char gender, string major, int grade, int clas, int score_count);
};
Class类的作用是存放学生信息,但是学生信息有两个类,本科生和研究生,用这个班级类的成员容器存储两类学生的信息。T可以是研究生也可以是本科生,但是在这里有涉及一个按总成绩排名的操作,而T是不定类型,想知道怎样才能够使这个类实例化多个类型,也就是实现在这个类中访问本科生或研究生的总成绩呢?