【模拟上机——模板类】

题目描述

设计一个学生类(Student),包括私有数据成员:学号(int型),姓名,成绩(int型),函数成员根据需要定义。 设计一个数组类模板(Array),形式大致如下:

class Array{
	private:
		int size;
		T *element;
	public:
		~Array();//析构函数
		operator>>//重载输入运算符
		operator<<//重载输出运算符
		void sort();//对数组内数据排序
};

Main函数内实现大致如下(以int型为例):

main(){
int num;//每种数据类型测试数据的个数
	cin>>num;
	Array<int> array_int(num);//初始化数组
	cin>>array_int;//调用重载输入运算符输入数据
	array_int.sort();//按要求对数组内数据排序
	cout<<array_int<<endl;//调用重载输出运算符输出数据
}

要求重载输入和输出运算符,实现对数组内数据的输入和输出,并设计成员函数sort(),当数组内数据是int,double型时,按照从小到大的顺序对数组数据进行排序并输出结果;当数组内数据是char型时,按照ASCII码从小到大的顺序排序并输出结果;当数组内数据为Student类型时,按照成绩(没有重复值)从小到大的顺序,输出排序后的学生学号。

输入

第一行一个整数N(N>0),代表按照int,double,char,Student(学号,姓名,成绩)类型的顺序,每种类型分别有N个测试数据。

输出

按照题目要求输出从小到大的排序结果,每种数据类型占一行,相同数据类型间的数据用空格分隔,行尾无空格。

注意:必须用类模板实现,且实现输入/输出运算符的重载,禁用STL,否则计0分。

样例输入

3
3 2 1
1.2 1.1 1.3
c b a
10000 zhao 92
20000 li 93
30000 zhao 94

样例输出

1 2 3
1.1 1.2 1.3
a b c
10000 20000 30000
#include <iostream>
#include <cstring>
using namespace std;

class Student {
private:
    int id;
    string name;
    int score;
public:
    Student(int i = 0, string n = "", int s = 0) : id(i), name(n), score(s) {}
    int getScore() const { return score; }
    bool operator<(const Student& s) const { return score < s.score; }
    friend istream& operator>>(istream& in, Student& s) {
        return in >> s.id >> s.name >> s.score;
    }
    friend ostream& operator<<(ostream& out, const Student& s) {
        return out << s.id;
    }
};

template<typename T>
class Array {
private:
    int size;
    T* element;
public:
    Array(int s = 0) : size(s), element(new T[s]) {}
    ~Array() { delete[] element; }
    void sort() {
        for (int i = 0; i < size - 1; i++) {
            for (int j = i + 1; j < size; j++) {
                if (element[j] < element[i]) {
                    T temp = element[i];
                    element[i] = element[j];
                    element[j] = temp;
                }
            }
        }
    }
    friend istream& operator>>(istream& in, Array<T>& a) {
        for (int i = 0; i < a.size; i++) {
            in >> a.element[i];
        }
        return in;
    }
    friend ostream& operator<<(ostream& out, const Array<T>& a) {
        for (int i = 0; i < a.size; i++) {
            out << a.element[i];
            if (i != a.size - 1) {
                out << " ";
            }
        }
        return out;
    }
};

template<>
class Array<char> {
private:
    int size;
    char* element;
public:
    Array(int s = 0) : size(s), element(new char[s]) {}
    ~Array() { delete[] element; }
    void sort() {
        for (int i = 0; i < size - 1; i++) {
            for (int j = i + 1; j < size; j++) {
                if (element[j] < element[i]) {
                    char temp = element[i];
                    element[i] = element[j];
                    element[j] = temp;
                }
            }
        }
    }
    friend istream& operator>>(istream& in, Array<char>& a) {
        for (int i = 0; i < a.size; i++) {
            in >> a.element[i];
        }
        return in;
    }
    friend ostream& operator<<(ostream& out, const Array<char>& a) {
        for (int i = 0; i < a.size; i++) {
            out << a.element[i];
            if (i != a.size - 1) {
                out << " ";
            }
        }
        return out;
    }
};

int main() {
    int n;
    cin >> n;
    Array<int> a1(n);
    cin >> a1;
    a1.sort();
    cout << a1 << endl;
    Array<double> a2(n);
    cin >> a2;
    a2.sort();
    cout << a2 << endl;
    Array<char> a3(n);
    cin >> a3;
    a3.sort();
    cout << a3 << endl;
    Array<Student> a4(n);
    cin >> a4;
    a4.sort();
    cout << a4 << endl;
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纳皮尔的骨头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值