面向对象编程应用实例|学习笔记

简介: 快速学习面向对象编程应用实例

开发者学堂课程【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()

}

}

相关文章
|
芯片 异构计算 内存技术
关于SPI协议,看这一篇文章就够了!
关于SPI协议,看这一篇文章就够了!
1451 0
关于SPI协议,看这一篇文章就够了!
多重分形 MATLAB
多重分形 MATLAB
|
10月前
|
机器学习/深度学习 人工智能 监控
AI视频监控在大型商场的智能技术方案
该方案通过目标检测与姿态识别技术(如YOLO、OpenPose),实时监控顾客行为,识别异常动作如夹带物品、藏匿商品等,并结合AI模型分析行为模式,防止偷窃。出口处设置结算验证系统,比对结算记录与视频信息,确保商品全部支付。多角度摄像头和数据交叉验证减少误报,注重隐私保护,提升安保效率,降低损失率,增强顾客信任。
670 15
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的优化算法及其应用
【10月更文挑战第8天】 本文将探讨深度学习中常用的优化算法,包括梯度下降法、Adam和RMSProp等,介绍这些算法的基本原理与应用场景。通过实例分析,帮助读者更好地理解和应用这些优化算法,提高深度学习模型的训练效率与性能。
900 63
|
存储 算法 安全
U盘打不开提示格式化怎么办?(含数据恢复及U盘修复教程)
本文介绍了U盘无法打开并提示格式化的问题,包括症状(如系统弹出格式化提示,文件系统显示为RAW)和常见原因(文件系统损坏、物理损坏)。提供了修复步骤:检查U盘连接、使用数据恢复软件恢复数据、更新U盘驱动、格式化U盘及使用修复工具。强调在格式化前要备份数据,严重损坏时可能需寻求专业维修。
|
XML Web App开发 前端开发
使用VScode开发Angular
使用VScode开发Angular
1176 0
使用VScode开发Angular
|
JSON 测试技术 API
使用Postman发送POST请求的指南
本文介绍了如何使用Postman发送POST请求进行接口测试。关键步骤包括:创建新请求,设置请求类型为POST,输入URL,添加请求头如`Content-Type: application/json`,在Body中选择raw输入JSON数据,然后发送请求并检查响应。示例展示了向用户注册接口发送数据的过程。掌握这些技能有助于高效测试API。
|
机器学习/深度学习 Python
python 机器学习 sklearn——手把手教你预测心脏病
python 机器学习 sklearn——手把手教你预测心脏病
|
缓存 前端开发 开发者
基于Next.js的服务端渲染(SSR)
基于Next.js的服务端渲染(SSR)
388 0
|
存储 Ubuntu 网络安全
百度搜索:蓝易云【Ubuntu14.04离线安装ssh所需安装包deb教程】
现在,你已经在Ubuntu 14.04离线机器上成功安装了SSH服务。注意,在离线安装过程中,可能需要手动处理依赖项问题。
526 0