个学生类,有学号、姓名、年龄、专业。函数有入学、升级、换专业、毕业。main函数能够创建多个学生,实现学生的各种信息处理,并能够统计每个专业的学生人数和学生总数。要用到静态数据成员和静态函数成员,用中文打印
时间: 2024-10-21 20:18:17 浏览: 37
在设计这个学生类的示例中,我们可以创建一个名为`Student`的类,包含四个属性:学号(student_id)、姓名(name)、年龄(age)和专业(major)。以下是该类的基本结构:
```cpp
class Student {
public:
// 构造函数初始化学生信息
Student(int id, std::string name, int age, std::string major)
: student_id(id), name(name), age(age), major(major) {}
// 属性访问
int get_student_id() const { return student_id; }
std::string get_name() const { return name; }
int get_age() const { return age; }
std::string get_major() const { return major; }
// 动态操作(如入学、升级等)
void enroll() { /* 入学操作 */ }
void upgrade() { /* 升级操作 */ }
void change_major(std::string new_major) { major = new_major; }
void graduate() { /* 毕业操作 */ }
// 静态数据成员(用于统计专业人数和总学生数)
static std::unordered_map<std::string, int> total_students;
static int global_total;
// 静态函数成员(更新统计数据)
static void update_stats(Student* s) {
if (total_students.find(s->get_major()) == total_students.end())
total_students[s->get_major()] = 1;
else
total_students[s->get_major()]++;
global_total++;
}
private:
int student_id;
std::string name;
int age;
std::string major;
};
// 主函数演示如何创建学生并操作
int main() {
Student a(1, "张三", 18, "计算机科学");
Student b(2, "李四", 20, "软件工程");
// 创建学生并调用操作
a.enroll();
b.change_major("人工智能");
// 更新静态统计数据
Student::update_stats(&a);
Student::update_stats(&b);
// 打印专业人数和总学生数
for (const auto& [major, count] : Student::total_students) {
std::cout << "专业 " << major << ": " << count << " 学生\n";
}
std::cout << "总学生数: " << Student::global_total << "\n";
return 0;
}
```
在这个例子中,`total_students`是一个静态全局映射,用于存储每个专业的学生数量,而`global_total`则是记录整个系统的总学生数。`update_stats`函数会更新这两个统计值。在`main`函数中,我们创建了两个学生对象并执行了一些操作,最后展示了统计结果。
阅读全文