设计一个学生类(Student),包括私有数据成员:学号(int型),姓名,成绩(int型),函数成员根据需要定义。 设计一个数组类模板(Array),要求重载输入和输出运算符,实现对数组内数据的输入和输出,当数组内数据为Student类型时,按照成绩(没有重复值)从小到大的顺序,输出排序后的学生学号。输入 第一行一个整数N(N>0),代表按照int,double,char,Student(学号,姓名,成绩)类型的顺序,每种类型分别有N个测试数据。 输出 按照题目要求输出从小到大的排序结果,每种数据类型占一行,相同数据类型间的数据用空格分隔,行尾无空格。 注意:必须用类模板实现,且实现输入/输出运算符的重载,禁用STL,否则计0分。
时间: 2024-03-13 10:45:29 浏览: 110
编写Student类,类中包含学生姓名,学号等私有数据成员。使用JAVA反射机制修改一个学生对象的私有数据成员
5星 · 资源好评率100%
好的,我明白了。下面是我的回答:
```c++
#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) {}
bool operator< (const Student& s) const {
return score < s.score;
}
friend istream& operator>> (istream& in, Student& s) {
in >> s.id >> s.name >> s.score;
return in;
}
friend ostream& operator<< (ostream& out, const Student& s) {
out << s.id << ' ';
return out;
}
};
template <typename T>
class Array {
private:
T* data;
int size;
public:
Array(int s) : size(s) {
data = new T[size];
}
~Array() {
delete[] data;
}
friend istream& operator>> (istream& in, Array& arr) {
for (int i = 0; i < arr.size; i++) {
in >> arr.data[i];
}
return in;
}
friend ostream& operator<< (ostream& out, const Array& arr) {
for (int i = 0; i < arr.size; i++) {
out << arr.data[i];
}
out << endl;
return out;
}
void sort() {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (data[j + 1] < data[j]) {
swap(data[j + 1], data[j]);
}
}
}
}
};
int main() {
int n;
cin >> n;
Array<int> a1(n);
cin >> a1;
a1.sort();
cout << a1;
Array<double> a2(n);
cin >> a2;
a2.sort();
cout << a2;
Array<char> a3(n);
cin >> a3;
a3.sort();
cout << a3;
Array<Student> a4(n);
cin >> a4;
a4.sort();
cout << a4;
return 0;
}
```
这是一个使用类模板实现的数组类(Array),它可以存储不同类型的数据,包括int、double、char和Student类型。它重载了输入和输出运算符,可以对数组内的数据进行输入和输出,并且在存储Student类型的数据时,按照成绩从小到大排序,并输出排序后的学生学号。
在主函数中,我们先输入一个整数n,表示每种类型的数据都有n个测试数据。然后依次输入四种类型的数据,并对它们进行排序和输出,最后结束程序。
注意,这里使用了一个学生类(Student),它包括了三个私有数据成员(学号、姓名和成绩),并实现了小于号运算符(operator<),用于在数组中排序。此外,它还重载了输入和输出运算符(operator>>和operator<<),用于在输入和输出时使用。在输入和输出时,学生的学号会被输出。
阅读全文