qq_24913945 2018-06-29 08:38 采纳率: 50%
浏览 1212
已结题

如何在一个调用模板的类中实例化多个类?

这样说的话可能有些不清楚,具体情况如下:

#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是不定类型,想知道怎样才能够使这个类实例化多个类型,也就是实现在这个类中访问本科生或研究生的总成绩呢?

  • 写回答

3条回答

  • pelily 2018-06-29 08:51
    关注

    template
    ostream& operator<<( ostream& s, const std::map& a)
    {
    int32 sz = a.size();
    s << sz;
    for(typename std::map::const_iterator i
    = a.begin(); i != a.end(); ++i)
    {
    if (!s.good()) break;
    s << i->first << i->second;
    }
    return s;
    }
    ostringstream oss;
    map a;
    oss << a;
    string as = oss.str();

    评论

报告相同问题?

悬赏问题

  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误