本关任务:利用静态成员机制,编写一个程序计算 Student 类对象的个数。 相关知识: 为了完成本关任务,你需要掌握:静态成员。 假设 Student 类有一个属性:个数 number,用于记录类对象(也就是学生个体)的个数。 此类属性,并不只属于任何一个对象,而是属于整个类,或者说,属于所有对象。 你可以说,有 number 个学生。可以说,某个学生的 name 叫xxx。 但是你不能说某个学生有 number 个学生。 这一类属性,设置为静态成员。 声明(头文件),static TYPE 成员名; 定义(实现文件,类外),TYPE 类名::成员名 = 初值; 静态数据成员的访问 对象.成员 类名::成员 静态数据成员,永远只有一个备份,无论有多少个对象 静态成员函数 语法:仅声明前加 static 用法:类名::静态成员函数 约束:不能访问本类非静态成员 编程要求: 根据提示,在下面代码指定位置补充代码,编写一个程序计算 Student 类对象的个数。 部分代码如下: #include <iostream> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ class Student { private: string name; //姓名 string id; //学号 double cpp_score; //C++成绩 double math_score; //数学成绩 double Eng_score; //英语成绩 //此处填写静态属性num的定义,num用来记录Student对象的个数。 //--------------------------------------------------- public: //此处填写静态成员函数show_num的声明,show_num函数用来将num的值显示到屏幕上 //----------------------------------------------------- //构造函数的声明,实现对num值的调整。 Student(); //析构函数的声明,实现对num值的调整。 ~Student(); }; //此处用来初始化静态属性num //----------------------------------- //此处用来实现show_num函数 //----------------------------------- //此处填写构造函数的定义,实现对num值的调整。 //------------------------------------- //此处填写析构函数的定义,实现对num值的调整。 //----------------------------------------- int main(int argc, char *argv[]) { int i, n; Student *ps[100]; cin >> n; for(i = 0; i < n; i++) { ps[i] = new Student(); Student::show_num(); } for(i = 0; i < n; i++) { delete ps[i]; Student::show_num(); } return 0; } 测试说明:平台会对你编写的代码进行测试。 测试输入: 5 预期输出: 1 2 3 4 5 4 3 2 1 0
时间: 2025-05-27 20:32:45 浏览: 19
### 代码概述
本代码通过定义一个`Student`类,并利用静态成员变量`num`和静态成员函数`show_num`来计算并展示`Student`类对象的个数。程序创建和删除对象时,分别调整静态成员变量的值。
---
### 代码解析
1. **静态成员变量`num`**
在类中声明为`static int num;`,并在类外部初始化为`int Student::num = 0;`。该变量记录所有`Student`对象的个数,属于整个类而不是某个具体对象。
2. **静态成员函数`show_num`**
声明为`static void show_num();`,定义为`void Student::show_num() { cout << num << endl; }`。此函数用于输出当前对象的总个数。
3. **构造函数与析构函数**
- 构造函数:`Student()`,在每次创建对象时将`num`加1。
- 析构函数:`~Student()`,在每次销毁对象时将`num`减1。
4. **主函数逻辑**
主函数先读取输入`n`,表示要创建的对象个数。然后通过循环创建`n`个对象,并调用`show_num`输出当前对象个数;之后再通过循环删除这些对象,并再次调用`show_num`输出剩余对象个数。
---
### 知识点
1. **静态成员变量**
静态成员变量属于整个类,所有对象共享同一份存储空间。需在类外初始化。
2. **静态成员函数**
静态成员函数只能访问静态成员变量或函数,不能访问非静态成员。
3. **构造与析构函数**
构造函数在对象创建时自动调用,析构函数在对象销毁时自动调用,可用于资源管理。
完整代码如下:
```cpp
#include <iostream>
using namespace std;
class Student
{
private:
string name; // 姓名
string id; // 学号
double cpp_score; // C++成绩
double math_score; // 数学成绩
double Eng_score; // 英语成绩
static int num; // 静态属性num,记录Student对象的个数
public:
static void show_num(); // 静态成员函数show_num,显示num的值
// 构造函数,实现对num值的调整
Student()
{
num++;
}
// 析构函数,实现对num值的调整
~Student()
{
num--;
}
};
// 初始化静态属性num
int Student::num = 0;
// 实现show_num函数
void Student::show_num()
{
cout << num << endl;
}
int main(int argc, char *argv[])
{
int i, n;
Student *ps[100];
cin >> n;
for (i = 0; i < n; i++)
{
ps[i] = new Student();
Student::show_num();
}
for (i = 0; i < n; i++)
{
delete ps[i];
Student::show_num();
}
return 0;
}
```
阅读全文
相关推荐














