c++编写程序【问题描述】定义并实现一个学生类(Student),类中的数据成员有:学生姓名、学生学号、人数和班级号。至少有一个公有成员函数(PrintStuInfo)。PrintStuInfo负责将相关信息输出。在类中定义静态数据成员,记录当前学生人数。在类中定义常数据成员,记录班级号,假设比较号为1001。添加一个友元函数,可对学生类中的私有数据成员进行访问。假设1001班的初始学生人数为45人。在主程序中测试新加入2个学生,并分别通过成员函数和友元函数输出输出2个学生的信息及班级总人数。 掌握静态数据成员、常数据成员和静态成员函数、常成员函数的基本使用方法。 理解友元和友元函数的作用,掌握其使用方法。 【输入形式】新加入班级的学生姓名 【输出形式】加入学生的信息及班级总人数。 【样例输入】 张三 王五 【样例输出】 名字:张三 学号:1 班级:1001 班级人数:47 名字:王五 学号:2 班级:1001 班级人数:47
时间: 2024-02-14 08:12:57 浏览: 146
以下是对应的C++程序实现:
```c++
#include <iostream>
#include <string>
using namespace std;
class Student {
private:
string name;
int id;
static int num;
const int class_id = 1001;
public:
Student(string n) {
name = n;
id = ++num; // 每新建一个对象,id就自增1
}
void PrintStuInfo() const {
cout << "Name: " << name << endl;
cout << "ID: " << id << endl;
cout << "Class ID: " << class_id << endl;
cout << "Class size: " << num << endl;
}
friend void PrintStuInfoByFriend(Student s); // 声明友元函数
static int GetNum() { // 静态成员函数,用于获取学生人数
return num;
}
};
int Student::num = 45; // 静态数据成员初始化
void PrintStuInfoByFriend(Student s) {
cout << "Name: " << s.name << endl;
cout << "ID: " << s.id << endl;
cout << "Class ID: " << s.class_id << endl;
cout << "Class size: " << s.num << endl;
}
int main() {
string name1, name2;
cout << "Please input the name of the first student: ";
cin >> name1;
cout << "Please input the name of the second student: ";
cin >> name2;
Student s1(name1);
Student s2(name2);
s1.PrintStuInfo(); // 调用成员函数输出学生信息
s2.PrintStuInfo(); // 调用成员函数输出学生信息
cout << "Class size: " << Student::GetNum() << endl; // 通过静态成员函数输出学生人数
PrintStuInfoByFriend(s1); // 调用友元函数输出学生信息
PrintStuInfoByFriend(s2); // 调用友元函数输出学生信息
cout << "Class size: " << Student::GetNum() << endl; // 通过静态成员函数输出学生人数
return 0;
}
```
程序中,我们定义了一个名为 `Student` 的类,它有四个数据成员:学生姓名 `name`、学生学号 `id`、班级人数 `num` 和班级号 `class_id`。其中,`num` 是一个静态数据成员,用于记录当前学生人数;`class_id` 是一个常数据成员,用于记录班级号,其值为1001。在类的定义中,我们声明了一个成员函数 `PrintStuInfo`,用于输出学生信息;同时,我们还声明了一个友元函数 `PrintStuInfoByFriend`,用于对学生类中的私有数据成员进行访问。在 `main` 函数中,我们按照要求输入了两个学生的姓名,然后分别创建了两个 `Student` 对象。我们分别调用了两个对象的成员函数 `PrintStuInfo` 输出学生信息,并使用了静态成员函数 `GetNum` 输出学生人数。最后,我们还通过调用友元函数 `PrintStuInfoByFriend` 输出了两个学生的信息,并再次使用了静态成员函数 `GetNum` 输出学生人数。需要注意的是,我们在类的定义中将 `PrintStuInfoByFriend` 声明为了友元函数,因为该函数需要访问学生类的私有数据成员。
阅读全文