1) 定义Student类和Score类,输出一个学生的成绩单(包括学号、姓名、高等数学、英语成绩)。要求通过以下三种方法实现: 方法1:非成员函数作为友元函数 方法2:成员函数作为友元函数 方法3:友元类
时间: 2024-02-05 16:03:03 浏览: 96
好的,下面是Python代码实现:
```python
class Score:
def __init__(self, math_score, english_score):
self.math_score = math_score
self.english_score = english_score
class Student:
def __init__(self, id, name, math_score, english_score):
self.id = id
self.name = name
self.score = Score(math_score, english_score)
# 方法1:非成员函数作为友元函数
def print_score1(self):
print("学号:{}\n姓名:{}\n高等数学成绩:{}\n英语成绩:{}\n".format(self.id, self.name, self.score.math_score, self.score.english_score))
# 方法2:成员函数作为友元函数
def print_score2(self):
print("学号:{}\n姓名:{}\n高等数学成绩:{}\n英语成绩:{}\n".format(self.id, self.name, self.get_math_score(), self.get_english_score()))
def get_math_score(self):
return self.score.math_score
def get_english_score(self):
return self.score.english_score
# 方法3:友元类
class ScorePrinter:
def print_score3(self, student):
print("学号:{}\n姓名:{}\n高等数学成绩:{}\n英语成绩:{}\n".format(student.id, student.name, student.score.math_score, student.score.english_score))
student = Student("001", "张三", 80, 90)
student.print_score1()
student.print_score2()
score_printer = Student.ScorePrinter()
score_printer.print_score3(student)
```
以上代码定义了 `Student` 和 `Score` 类,其中 `Score` 类存储学生的数学和英语成绩,`Student` 类存储学生的学号和姓名,以及一个 `Score` 类型的成绩属性。实现了三种方法输出学生成绩单:
- 方法1中,定义了一个名为 `print_score1` 的非成员函数,通过 `student.score` 访问学生成绩属性,输出学生成绩单。
- 方法2中,定义了一个名为 `print_score2` 的成员函数,通过 `self.get_math_score()` 和 `self.get_english_score()` 访问学生成绩属性,输出学生成绩单。
- 方法3中,定义了一个名为 `ScorePrinter` 的嵌套类,成为了 `Student` 类的友元类,通过 `student.score` 访问学生成绩属性,输出学生成绩单。
阅读全文