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

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

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

}

}

相关文章
【每日一题Day293】LC23合并K个升序链表 | K指针 堆排序 归并排序
【每日一题Day293】LC23合并K个升序链表 | K指针 堆排序 归并排序
81 0
|
消息中间件 Java Kafka
docker-compose快速搭建kafka集群
docker-compose快速搭建kafka集群
docker-compose快速搭建kafka集群
|
7月前
|
机器学习/深度学习 人工智能 监控
AI视频监控在大型商场的智能技术方案
该方案通过目标检测与姿态识别技术(如YOLO、OpenPose),实时监控顾客行为,识别异常动作如夹带物品、藏匿商品等,并结合AI模型分析行为模式,防止偷窃。出口处设置结算验证系统,比对结算记录与视频信息,确保商品全部支付。多角度摄像头和数据交叉验证减少误报,注重隐私保护,提升安保效率,降低损失率,增强顾客信任。
385 15
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的优化算法及其应用
【10月更文挑战第8天】 本文将探讨深度学习中常用的优化算法,包括梯度下降法、Adam和RMSProp等,介绍这些算法的基本原理与应用场景。通过实例分析,帮助读者更好地理解和应用这些优化算法,提高深度学习模型的训练效率与性能。
668 63
|
9月前
|
运维 监控 安全
代理IP故障排查技巧汇总及实战经验分享
在信息化时代,互联网不可或缺。使用HTTP动态代理IP时,快速排查故障至关重要。主要步骤包括:1. 检查代理IP有效性(Ping测试、HTTP请求测试);2. 监控连接速度(延迟和带宽测试);3. 分析错误信息(HTTP状态码、日志);4. 检查代理设置(配置文件、协议支持);5. 使用调试工具(Wireshark、浏览器开发者工具);6. 咨询服务提供商;7. 检查网络环境(防火墙、ISP限制);8. 逐步排查并记录变化。这些技巧能有效找出并解决问题。
478 10
|
10月前
|
应用服务中间件 网络安全 nginx
轻松上手Nginx Proxy Manager:安装、配置与实战
Nginx Proxy Manager (NPM) 是一款基于 Nginx 的反向代理管理工具,提供直观的 Web 界面,方便用户配置和管理反向代理、SSL 证书等。本文档介绍了 NPM 的安装步骤,包括 Docker 和 Docker Compose 的安装、Docker Compose 文件的创建与配置、启动服务、访问 Web 管理界面、基本使用方法以及如何申请和配置 SSL 证书,帮助用户快速上手 NPM。
6379 1
|
Ubuntu 安全 Linux
在Ubuntu 20.04上安装和配置VNC的方法
在Ubuntu 20.04上安装和配置VNC的方法
1341 0
Linux systemd 定时任务
Linux systemd 定时任务
|
小程序 JavaScript 定位技术
微信小程序地图实现标记多个位置
微信小程序地图实现标记多个位置
542 0
|
API Android开发
关于Android 日历事件的实现
经常购买火车票,机票的同学就知道,当我们买下一张票的时候,票的行程日期会被写入系统日历中,当火车开动或者飞机启航的前30分钟,手机会有提醒信息,这条信息是由系统日历发出的,提醒用户,别错过时间啦。 像这种系统日历提醒功能,实现起来并不难,毕竟Android 系统已经提供API给我们调用了,不需要重新造轮子,下面我们来实现这个功能。
548 0