1 定义 `Student` 类,包含三个私有普通数据成员:`int` 型的学号 `id`、`std::string` 型的姓名 `name`、`double` 型的分数 `score`;两个私有静态数据成员:初始值为 0 的 `double` 型总分 `total` 和初始值为 0 的 `int` 型学生人数 `count`。提供带参构造函数初始化对象,若分数为负则置为 0 并更新 `total` 和 `count`。成员函数 `ChangeScore(double)` 用于修改分数,分数为负时置为 0 并更新 `total`。静态成员函数 `GetAverage()` 计算并打印平均分,会处理学生人数为 0 的情况。
时间: 2025-06-05 13:58:28 浏览: 23
### 定义 Student 类的实现
以下是基于问题需求设计的一个完整的 `Student` 类实现:
#### 代码实现
```cpp
#include <iostream>
#include <string>
using namespace std;
class Student {
private:
int id; // 学生ID
string name; // 姓名
float score; // 成绩 (非静态数据成员)
public:
static float total; // 总成绩 (静态数据成员)
static int count; // 学生数量计数器 (静态数据成员)
// 构造函数
Student(int i, const string& n, float s) : id(i), name(n) {
if (s < 0) { // 如果分数小于0,则设置为0
score = 0;
} else {
score = s;
}
total += score; // 将当前学生成绩加入总成绩
count++; // 计数器增加
}
// 修改分数的成员函数
void ChangeScore(float new_score) {
if (new_score >= 0) { // 新分数必须大于等于0
total -= score; // 减去旧分数
score = new_score; // 更新新分数
total += score; // 加入新的分数
}
}
// 获取平均分的静态成员函数
static float GetAverage() {
if (count == 0) { // 防止除以0的情况
return 0;
}
return total / count; // 返回平均分
}
// 打印学生信息的成员函数
void PrintInfo() const {
cout << "ID: " << id << ", Name: " << name << ", Score: " << score << endl;
}
};
// 初始化静态成员变量
float Student::total = 0; // 初始总分为0
int Student::count = 0; // 初始计数器为0
/// 测试代码
int main() {
Student student1(1, "Alice", 85);
Student student2(2, "Bob", -10); // 负分会被自动修正为0
Student student3(3, "Charlie", 90);
student1.PrintInfo();
student2.PrintInfo();
student3.PrintInfo();
cout << "Total Students: " << Student::count << endl;
cout << "Average Score: " << Student::GetAverage() << endl;
student1.ChangeScore(95); // 更改Alice的成绩
cout << "Updated Average Score: " << Student::GetAverage() << endl;
return 0;
}
```
---
#### 实现说明
1. **私有数据成员**
- `id`: 表示学生的唯一标识号。
- `name`: 表示学生的姓名。
- `score`: 表示学生的成绩,这是一个非静态数据成员。
2. **静态成员**
- `static float total`: 用于记录所有学生的总成绩[^4]。
- `static int count`: 用于记录已创建的学生对象的数量[^4]。
3. **构造函数**
- 当创建一个新的 `Student` 对象时,如果传入的成绩 (`score`) 是负数,则将其设为0[^3]。同时更新 `total` 和 `count` 的值[^3]。
4. **成员函数 `ChangeScore`**
- 提供了一个方法来更改某个学生的成绩,并同步更新 `total` 的值[^1]。
5. **静态成员函数 `GetAverage`**
- 使用 `total` 和 `count` 来计算并返回所有学生的平均成绩。为了避免除以0的错误,在计算前检查了 `count` 是否为0[^5]。
6. **打印信息**
- 添加了一个辅助函数 `PrintInfo()`,方便测试时查看每个学生的详细信息。
---
###
阅读全文
相关推荐












