类与对象
本课属于 Coddy GDScript 学习旅程的“面向对象编程”单元。第 3 课,共 65 课。
类和它的对象各自保存不同的内容。类中的 const 属于类本身:它只有一个值,你可以通过类名读取它,无需创建对象。
# dog.gd
class_name Dog
extends RefCounted
const SPECIES = "Canis familiaris"
var dog_name: String = "Unnamed"
var breed: String = "Unknown"print(Dog.SPECIES) # Canis familiarisvar 行描述了每个对象包含的内容。每个使用 new() 创建的对象都会获得这些变量各自的副本,并从默认值开始:
var dog1 := Dog.new()
var dog2 := Dog.new()
dog1.dog_name = "Nicky"
dog1.breed = "Husky"
print(dog1.dog_name) # Nicky
print(dog2.dog_name) # Unnamed更改 dog1 不会改变 dog2。对象也可以读取这个常量:dog1.SPECIES 的值与 Dog.SPECIES 相同。
对象只能有其类中声明的变量。dog1.color = "brown"会导致程序因错误而停止,因为Dog没有color变量。对象需要的每个变量都要放在类中。
挑战
简单在 student.gd 中完成 Student 类:
- 创建一个常量
SCHOOL,值为"Godot High School",由整个类共享 - 创建一个
String变量student_name - 创建一个
String变量grade,初始值为"N/A"
提供的代码会读取后续学生的人数,然后为每位学生读取一行:一个姓名,后面可选地跟着一个空格和一个成绩。它会为每行创建一个 Student,设置姓名,并且仅当该行包含成绩时才设置成绩。然后,它会输出 Student.SCHOOL 和每位学生。对于输入行 Alice A 和 Bob,输出为:
School: Godot High School
Alice has grade A
Bob has grade N/A你的代码写在 student.gd 中。main.gd 包含提供的输入/输出代码,不能编辑。
亲手试试
extends Node
func _ready():
# 提供的输入和输出代码:保持原样。
var count := int(OS.read_string_from_stdin())
var students: Array[Student] = []
for i in count:
var parts := OS.read_string_from_stdin().split(" ", false)
var student := Student.new()
student.student_name = parts[0]
if parts.size() > 1:
student.grade = parts[1]
students.append(student)
print("School: %s" % Student.SCHOOL)
for student in students:
print("%s has grade %s" % [student.student_name, student.grade])
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: GDScript 在线编译器