c++编写
时间: 2023-07-01 20:26:30 浏览: 52
好的,下面是 C++ 版本的代码实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
class Score {
public:
Score(int math_score, int english_score) {
this->math_score = math_score;
this->english_score = english_score;
}
friend class Student;
private:
int math_score;
int english_score;
};
class Student {
public:
Student(string id, string name, int math_score, int english_score)
: id(id), name(name), score(math_score, english_score) {}
// 方法1:非成员函数作为友元函数
friend void print_score1(Student& student) {
cout << "学号:" << student.id << endl;
cout << "姓名:" << student.name << endl;
cout << "高等数学成绩:" << student.score.math_score << endl;
cout << "英语成绩:" << student.score.english_score << endl;
}
// 方法2:成员函数作为友元函数
friend void print_score2(Student& student);
// 方法3:友元类
class ScorePrinter {
public:
void print_score3(Student& student) {
cout << "学号:" << student.id << endl;
cout << "姓名:" << student.name << endl;
cout << "高等数学成绩:" << student.score.math_score << endl;
cout << "英语成绩:" << student.score.english_score << endl;
}
};
private:
string id;
string name;
Score score;
};
// 方法2:成员函数作为友元函数
void print_score2(Student& student) {
cout << "学号:" << student.id << endl;
cout << "姓名:" << student.name << endl;
cout << "高等数学成绩:" << student.score.math_score << endl;
cout << "英语成绩:" << student.score.english_score << endl;
}
int main() {
Student student("001", "张三", 80, 90);
print_score1(student);
print_score2(student);
Student::ScorePrinter score_printer;
score_printer.print_score3(student);
return 0;
}
```
以上代码同样定义了 `Student` 和 `Score` 类,实现了三种方法输出学生成绩单:
- 方法1中,定义了一个名为 `print_score1` 的非成员函数,通过 `student.score` 访问学生成绩属性,输出学生成绩单。
- 方法2中,定义了一个名为 `print_score2` 的全局函数,通过 `student.score` 访问学生成绩属性,输出学生成绩单。
- 方法3中,定义了一个名为 `ScorePrinter` 的嵌套类,成为了 `Student` 类的友元类,通过 `student.score` 访问学生成绩属性,输出学生成绩单。
在 `main` 函数中分别调用这三种方法输出学生成绩单。