开发者学堂课程【Go语言核心编程 - 面向对象、文件、单元测试、反射、TCP编程:面向对象编程应用实例】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/968
面向对象编程应用实例
内容介绍:
一、面向对象编程的步骤
二、学生案例
三、小狗案例
四、盒子案例
五、景区门票案例
一、面向对象编程的步骤
1)声明(定义结构体,确定结构体名
2)编写结构体的字段
3)编写结构体的方法
二、学生案例
1) 自定义编写一个student结构体,包含name、gender、age、id、score字段,分别为string.string、int、int、float64类型。
2) 结构体中声明一个say方法,返回string类型,方法返回信息中包含所有字段值。
3) 在main方法中,创建Student结构体实例(变量),并访问say方法,并将调用结果打印输出。
在chapter10中新建一个文件夹命名为oopexercise,并建立main.go文件。输入共用代码:
package main
import (
"fmt"
写出主函数func main(){},编写一个结构体,题目中要求需要有以下字段:name、gender、age、id、score,分别是string.string、int、int、float64类型,则需要输入以下代码:
type student struct {
name string,
gender string
age int
id int
score float64
同时要有一个方法say,say这个方法能够返回所有字段的值,代码为:func (student*Student)为了方便我们直接把它声明成指针类型,这样可以提高开发效率。输入say()string {}表示没有参数的传入,然后格式化得到各个信息,代码为infostr := fmt.Sprintf("student的信息 name=[%v] gender=[%v], age=[%v] id=[%v] score=[%v]",student.name, student.gender,student.age,student.id, student.score)。然后将其返回输入return infostr
}。输入:var stu = student{创建一个student实例变量,再对各个字段进行赋值:
name : "tom",
gender : "male",
age : 18,
id : 1000,
score : 99.98,
}
输入:fmt.Println(stu.say())完成输出。
}
运行后发现效果与想象一致。
l 核心代码:
type student struct {
name string,
gender string
age int
id int
score float64
func (student*Student) say()string {
infostr := fmt.Sprintf("student的信息 name=[%v] gender=[%v], age=[%v] id=[%v] score=[%v]",
student.name, student.gender,student.age,student.id, student.score)
return infostr
}
func main() {
//测试
//创建一个student实例变量
var stu = student{
name : "tom",
gender : "male",
age : 18,
id : 1000,
score : 99.98,
}
fmt.Println(stu.say())
}
三、小狗案例
小狗案例[学员课后练习]
1)编写一个Dog结构体,包含name、age、weight字段
2)结构体中声明一个say方法,返回string类型,方法返回信息中包含所有字段值。
3)在main方法中,创建Dog结构体实例(变量),并访问say方法,将调用结果打印输出。
四、盒子案例(面向对象案例)
1)编程创建一个Box结构体,在其中声明三个字段表示一个立方体的长、宽和高,}
长宽高要从终端获取
2)声明一个方法获取立方体的体积。
3)创建一个Box结构体变量,打印给定尺寸的立方体的体积。
根据面向对象的编程规则,首先把结构体创建出来,type Box struct {,该结构体是struct类型。字符段长宽高都是都是float64类型,输入字符段:
len f1oat64
width float64
height float64
}
然后获取立方体的体积,输入func (box *Box) getVolumn()float64 {
return box.len*box.width* box.height}。下面进行测试,首先去创建一个box结构体变量var box Box,然后进行赋值:
box.len = 1.1
box.width =2.0
box.height =3.0
再去调用方法,输入volumn := box.getVolumn(),输出则需要以下代码:fmt.Printf("体积为=%.2f",volumn)
}
l 核心代码:
type Box struct {
len f1oat64
width float64
height float64
}
//声明一个方法获取立方体的体积
func (box *Box) getVolumn()float64 {
return box.len*box.width* box.height
}
//测试代码
var box Box
box.len = 1.1
box.width =2.0
box.height =3.0
volumn := box.getVolumn()
fmt.Printf("体积为=%.2f",volumn)
}
五、景区门票案例
1)一个景区根据游人的年龄收取不同价格的门票,比如年龄大于18,收费20元,其它情况门票免费.
2)请编写visitor结构体,根据年龄段决定能够购买的门票价格并输出
名字和年龄通过控制台输入,而且当输入姓名为n的时候就需要退出程序。因此需要一个循环,并在循环里进行判断。首先要创建一个visitor结构体,代码为type Visitor struct {},结构体类型为struct。结构体中的字段有年龄(Age),还有名字(Name),分别是int类型和string类型,输入:Name string Age int,写入字段。此时还有一个方法能够计算每个姓名对应年龄下的门票,通过直接绑定的方法,并利用visitor的指针类型,代码为:func(visitor *Visitor) showPrice(){}。通过判读得出每位游客的景区票价,输入代码:
if visitor.Age >18 {
fmt. Printf("游客的名字为%v年龄为%v收费20元 \n", visitor.Name, visitor.Age)
}else {
fmt. Printf("游客的名字为%v年龄为%v免费\n", visitor.Name, visitor.Age)
}
如果参观游客的年龄大于18岁,则收费20块钱,输出结果为:游客的名字为年龄为收费20块钱,简单明了。如果参观游客的年龄不是大于18岁,那就是其他情况,即可以免费参观。而对年龄的严谨判断,比如当游客的年龄小于等于8岁或者大于等于90岁时,我们也进行一个判断,并输出以下内容:考虑到安全,请不要玩了,则需要以下代码:
if visitor.Age >=90 || visitor.Age <=8 {
fmt.Print1n("考虑到交全,就不要玩了")
return
测试的时候,首先需要创建一个visitor,但是名字还有年龄是需要输入的,所以此时需要利用for循环(var v Visitorfor for{}),并完成提示:请输入你的名字,然后得到Name的值(fmt.Print1n(”请输入你的名字")fmt.Scan1n(&v. Name));继续接受游客的年龄(fmt.Println("请输入你的年龄")fmt.Scan1n(&v. Age))。然后去调用价格的判断(v.showPrice()),但是题目中还有一个要求,需要在Name为n时,退出程序,则需要添加一个判断并提示退出程序:
if v.Name == "n”{
fmt.Println("退出程序....")
break
l 核心代码:
type Visitor struct {
Name string
Age int
}
func(visitor *Visitor) showPrice(){
if visitor.Age >=90 || visitor.Age <=8 {
fmt.Print1n("考虑到交全,就不要玩了")
return
}
if visitor.Age >18 {
fmt. Printf("游客的名字为%v年龄为%v收费20元 \n", visitor.Name, visitor.Age)
}else {
fmt. Printf("游客的名字为%v年龄为%v免费\n", visitor.Name, visitor.Age)
}
//测试:这段代码放在main函数中
var v Visitorfor
for{
fmt.Print1n(”请输入你的名字")
fmt.Scan1n(&v. Name)
if v.Name == "n”{
fmt.Println(“退出程序....")
break
}
fmt.Println("请输入你的年龄")
fmt.Scan1n(&v. Age)
v.showPrice()
}
}