用c++写一段程序,要求如下:已知学生类Student,包括学号、姓名、三门课的成绩。设计一个友元函数,输出按平均成绩对应的等级: -大于等于90为“优” - 80~89为“良” - 70~79为“中” -60~69为“及格” - 小于60为“不及格”
时间: 2024-09-30 18:13:29 浏览: 45
在C++中,我们可以为`Student`类添加一个友元函数(Friend Function),以便直接访问其私有成员。首先,我们需要定义`Student`类和相关的结构,然后编写友元函数来计算平均成绩并返回等级。以下是实现这一功能的代码:
```cpp
#include <iostream>
#include <string>
// 定义课程成绩类型
enum CourseGrade { PASS = 60, A优良 = 90, B良好 = 80, C中等 = 70 };
// 学生类
class Student {
private:
int student_id;
std::string name;
CourseGrade course1, course2, course3;
// 计算平均成绩
double calculateAverage() const {
return (course1 + course2 + course3) / 3.0;
}
friend std::string gradeAccordingToAverage(const Student& s); // 友元函数声明
public:
// 构造函数
Student(int id, const std::string& n, CourseGrade c1, CourseGrade c2, CourseGrade c3)
: student_id(id), name(n), course1(c1), course2(c2), course3(c3) {}
// 获取学生信息
friend std::ostream& operator<<(std::ostream& os, const Student& s);
};
// 友元函数实现
std::string gradeAccordingToAverage(const Student& s) {
double average = s.calculateAverage();
if (average >= 90)
return "优";
else if (average >= 80)
return "良";
else if (average >= 70)
return "中";
else if (average >= 60)
return "及格";
else
return "不及格";
}
// 输出学生信息到流
std::ostream& operator<<(std::ostream& os, const Student& s) {
os << "学生ID: " << s.student_id << ", 姓名: " << s.name
<< ", 成绩: [" << static_cast<int>(s.course1) << ", "
<< static_cast<int>(s.course2) << ", " << static_cast<int>(s.course3) << "]" << std::endl;
return os;
}
int main() {
Student student(1, "张三", A优良, B良好, PASS);
std::cout << "学生 " << student << " 的等级是: " << gradeAccordingToAverage(student) << std::endl;
return 0;
}
```
上述代码定义了一个`gradeAccordingToAverage`友元函数,它接受一个`Student`对象,并根据平均成绩返回相应的等级。主函数中创建了一个`Student`实例并调用了该友元函数。
阅读全文