帮我写一个c++包含类、继承、多态、排序的学生管理系统
时间: 2023-10-20 07:20:41 浏览: 40
好的,以下是一个简单的C++学生管理系统代码示例,包含类、继承、多态和排序功能:
```
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// 学生类
class Student {
protected:
string name;
int age;
int score;
public:
Student(string n, int a, int s) : name(n), age(a), score(s) {}
virtual void display() {
cout << "Name: " << name << ", Age: " << age << ", Score: " << score << endl;
}
bool operator <(const Student& s) const {
return score < s.score;
}
};
// 班级类
class Class {
protected:
vector<Student*> students;
public:
virtual void addStudent(Student* s) {
students.push_back(s);
}
virtual void display() {
for (auto s : students) {
s->display();
}
}
virtual void sort() {
std::sort(students.begin(), students.end(), [](Student* s1, Student* s2) { return (*s1) < (*s2); });
}
};
// 普通班级
class NormalClass : public Class {
public:
void addStudent(Student* s) override {
if (students.size() < 50) {
Class::addStudent(s);
}
}
};
// 高级班级
class AdvancedClass : public Class {
public:
void addStudent(Student* s) override {
if (students.size() < 30 && s->score > 90) {
Class::addStudent(s);
}
}
void sort() override {
std::sort(students.begin(), students.end(), [](Student* s1, Student* s2) { return s1->name < s2->name; });
}
};
int main() {
NormalClass nClass;
nClass.addStudent(new Student("Tom", 18, 80));
nClass.addStudent(new Student("Jerry", 19, 90));
nClass.addStudent(new Student("Alice", 20, 70));
nClass.addStudent(new Student("Bob", 21, 85));
nClass.display();
nClass.sort();
nClass.display();
AdvancedClass aClass;
aClass.addStudent(new Student("Tom", 18, 95));
aClass.addStudent(new Student("Jerry", 19, 92));
aClass.addStudent(new Student("Alice", 20, 93));
aClass.addStudent(new Student("Bob", 21, 90));
aClass.display();
aClass.sort();
aClass.display();
return 0;
}
```
这个程序中,我们定义了一个学生类和一个班级类。班级类是一个抽象类,包含了添加学生、显示学生信息和排序学生信息的三个虚函数。普通班级和高级班级都继承了班级类,并根据不同的需求重写了添加学生和排序学生信息的函数。
在主函数中,我们创建了一个普通班级对象和一个高级班级对象,分别添加了四个学生,并展示了学生信息和排序后的学生信息。