练习7:使用静态成员统计学生对象数量¶
任务描述¶
设计学生类 Student,使用静态数据成员统计当前存活的学生对象数量。每创建一个对象,数量加一;每销毁一个对象,数量减一。
相关知识¶
静态数据成员¶
静态数据成员属于类本身,而不属于某一个对象。同一个类的所有对象共享同一份静态数据成员。
静态成员函数¶
静态成员函数可使用类名直接调用,不需要先创建对象。静态成员函数只能直接访问静态成员。
编程要求¶
- 在
Student.h中声明Student类,包含私有静态数据成员count。 - 声明公有构造函数、析构函数和静态成员函数:
- 在
Student.cpp中将Student::count初始化为0;构造函数使其加一,析构函数使其减一。 - 在
test中用assert验证不同作用域内对象数量的变化,并验证输出。
待完成代码¶
Student.h¶
Student.cpp¶
main.cpp¶
#include "Student.h"
#include <cassert>
#include <iostream>
#include <sstream>
void test() {
assert(Student::GetCount() == 0);
Student first;
Student second;
assert(Student::GetCount() == 2);
{
Student third;
assert(Student::GetCount() == 3);
}
assert(Student::GetCount() == 2);
std::ostringstream output;
std::streambuf* oldBuffer = std::cout.rdbuf(output.rdbuf());
std::cout << "当前学生数 " << Student::GetCount() << '\n';
std::cout.rdbuf(oldBuffer);
assert(output.str() == "当前学生数 2\n");
}
int main() {
test();
std::cout << "本关测试通过" << std::endl;
return 0;
}
测试说明¶
third 离开内部作用域后会自动析构,数量从 3 恢复为 2。最终预期输出:
开始你的任务吧,祝你成功!