题目描述
设计一个学生类(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;
}