1 定义 `Student` 类,包含三个私有普通数据成员:`int` 型的学号 `id`、`std::string` 型的姓名 `name`、`double` 型的分数 `score`;两个私有静态数据成员:初始值为 0 的 `double` 型总分 `total` 和初始值为 0 的 `int` 型学生人数 `count`。提供带参构造函数初始化对象,若分数为负则置为 0 并更新 `total` 和 `count`。成员函数 `ChangeScore(double)` 用于修改分数,分数为负时置为 0 并更新 `total`。静态成员函数 `GetAverage()` 计算并打印平均分,会处理学生人数为 0 的情况。c++
时间: 2025-06-05 22:58:21 浏览: 14
### 类定义与实现
以下是基于需求在C++中定义 `Student` 类的完整实现:
#### 类定义部分
```cpp
#include <iostream>
#include <string>
class Student {
private:
int id; // 学号
std::string name; // 姓名
double score; // 成绩
static int total; // 所有学生的总成绩
static int count; // 学生总数
public:
// 默认构造函数
Student() : id(0), name("ssdut"), score(0.0) {
++count;
}
// 带参构造函数
Student(int newId, const std::string& newName, double newScore)
: id(newId), name(newName), score(newScore) {
total += score;
++count;
}
// 修改分数的成员函数
void ChangeScore(double newScore) {
total -= score; // 更新总分前先减去旧分数
score = newScore; // 设置新分数
total += score; // 加上新分数
}
// 获取平均分的静态成员函数
static double GetAverage() {
return (count > 0) ? static_cast<double>(total) / count : 0.0;
}
// 显示学生信息的成员函数
void ShowInfo() const {
std::cout << "ID: " << id << ", Name: " << name
<< ", Score: " << score << std::endl;
}
};
```
#### 静态成员初始化
```cpp
int Student::total = 0; // 初始化总分为0
int Student::count = 0; // 初始化学生数量为0
```
#### 主函数测试
```cpp
int main() {
// 创建默认学生对象并显示其信息
Student s1;
s1.ShowInfo();
// 创建带有参数的学生对象并显示其信息
Student s2(2023001, "Alice", 85.5);
s2.ShowInfo();
// 调用修改分数的方法
s2.ChangeScore(90.0);
s2.ShowInfo();
// 创建另一个学生对象
Student s3(2023002, "Bob", 78.0);
s3.ShowInfo();
// 输出当前学生的平均分
std::cout << "Current average score: " << Student::GetAverage() << std::endl;
return 0;
}
```
---
### 功能说明
1. **私有普通数据成员**
- `id`: 表示学号。
- `name`: 表示姓名,使用 `std::string` 数据类型[^1]。
- `score`: 表示成绩。
2. **私有静态数据成员**
- `total`: 记录所有学生的总成绩。
- `count`: 统计学生对象的数量。
3. **构造函数**
- 提供了一个无参构造函数,默认设置初始值。
- 提供了带参构造函数,允许用户指定学号、姓名和成绩。
4. **成员函数**
- `ChangeScore`: 修改某个学生的成绩,并同步更新总分。
- `ShowInfo`: 展示单个学生的详细信息。
- `GetAverage`: 返回所有学生的平均成绩,通过静态方式调用。
---
### 注意事项
- 构造函数每次创建新的学生对象时会增加 `count` 和累加 `total`。
- 如果没有任何学生对象存在,则返回的平均分为 0.0。
- 使用 `static_cast<double>` 将整数转换为浮点数以确保计算精度[^1]。
---
阅读全文
相关推荐













