设计class:student,根据你的需求分析,定义数据成员和成员函数,类型、数量和功能无限制,要求: 1. class中需要至少分别定义1个static和const成员; 2. 至少3种构造函数:不带参数的构造函数,带参数有默认值的构造函数,拷贝构造函数以及你需要的其他构造函数; 3. 析构函数:自定义析构函数; 4. 使用友元函数,实现合适的功能; 5. 编写测试程序main(),测试你定义的class:student中的所有功能;
时间: 2023-12-08 10:06:31 浏览: 27
以下是一个可能的实现:
```cpp
#include <iostream>
#include <string>
class Student {
public:
static const int MAX_COURSES = 10;
Student() : name(""), id(0), num_courses(0) {}
Student(const std::string& name, int id, int num_courses = 0)
: name(name), id(id), num_courses(num_courses) {}
Student(const Student& other) : name(other.name), id(other.id), num_courses(other.num_courses) {
for (int i = 0; i < num_courses; ++i) {
courses[i] = other.courses[i];
}
}
~Student() {
std::cout << "Destructor called for student " << name << " with ID " << id << std::endl;
}
void enroll(const std::string& course) {
if (num_courses < MAX_COURSES) {
courses[num_courses++] = course;
} else {
std::cout << "Cannot enroll in more than " << MAX_COURSES << " courses" << std::endl;
}
}
void display_courses() const {
std::cout << name << " is enrolled in the following courses:" << std::endl;
for (int i = 0; i < num_courses; ++i) {
std::cout << "- " << courses[i] << std::endl;
}
}
int get_id() const {
return id;
}
friend void print_student_info(const Student& student);
private:
std::string name;
int id;
std::string courses[MAX_COURSES];
int num_courses;
};
void print_student_info(const Student& student) {
std::cout << "Student " << student.name << " has ID " << student.id
<< " and is enrolled in " << student.num_courses << " courses" << std::endl;
}
int main() {
Student s1("Alice", 123456);
s1.enroll("Math");
s1.enroll("Physics");
Student s2(s1);
s2.enroll("Chemistry");
Student s3 = s1;
s3.enroll("Biology");
print_student_info(s1);
s1.display_courses();
print_student_info(s2);
s2.display_courses();
print_student_info(s3);
s3.display_courses();
return 0;
}
```
在这个实现中,`Student` 类表示一个学生,包含了姓名、学号、所选课程等信息。静态常量成员 `MAX_COURSES` 表示一个学生最多能选修的课程数。构造函数和析构函数对应对象的创建和销毁过程。`enroll` 函数用于将一个课程添加到学生的选课列表中,`display_courses` 函数用于显示学生当前所选的课程。`get_id` 函数返回学生的学号。`print_student_info` 是一个友元函数,用于打印学生的基本信息。
在 `main` 函数中,我们创建了三个 `Student` 对象,并分别测试了它们的各项功能。注意,在每个对象被销毁时,析构函数都会被调用。