面向对象编程应用实例
1.步骤
1)申明/定义结构体,确定结构体名
2)编写结构体字段/属性
3)编写结构体方法
2.案例
案例一:
要求:(1)辨析一个Student结构体,包含name、gender、age、ID、score字段,分别为string、string、int、int、float64类型。(2)结构声明一个say方法,返回string类型,方法返回信息中包含所有字段值。(3)在main方法中,创建Student结构体实例(变量),访问say方法,并将结果打印。
type Student struct {
Name string `json:"name"`
Gender string `json:"gender"`
Age int `json:"age"`
Id int `json:"id"`
Score float64 `json:"score,omitempty"`
}
func (student *Student) say() string {
infor := fmt.Sprintf("student的信息为name=[%v],gender=[%v],age=[%v],id=[%v],score=[%v]",
student.Name, student.Gender, student.Age, student.Id, student.Score)
return infor
}
func (student Student) String() string {
str := fmt.Sprintf("student的信息为name=[%v],gender=[%v],age=[%v],id=[%v],score=[%v]",
student.Name, student.Gender, student.Age, student.Id, student.Score)
return str
}
func main() {
stu := Student{
Name: "tome",
Gender: "male",
Age: 18,
Id: 0123,
Score: 90.5,
}
//1.调用say()方法
fmt.Println(stu.say())
// sudent的信息为name=[tome],gender=[male],age=[18],id=[83],score=[90.5]
//2.使用fmt.Println()时会直接调用String()方法 调用String()方法
fmt.Println(stu) //等价于fmt.Println(&stu)
// student的信息为name=[tome],gender=[male],age=[18],id=[83],score=[90.5]
//3.使用json格式
jsonstr, err := json.Marshal(stu)
// json.Marshal(v interface{}) ([]byte, error) 使用到反射机制
if err != nil {
fmt.Println("json处理错误", err)
} else {
fmt.Println(string(jsonstr))
// {"name":"tome","gender":"male","age":18,"id":83,"score":90.5}
}
}
案例二:
要求:(1)创建一个Box结构体,其中声明三个字段表示一个立方体的长、宽和高,长宽高要求从终端获取,(2)声明一个方法求立方体的体积。
type Box struct {
len float64
width float64
height float64
}
func (box Box) getVolume() float64 {
res := box.len * box.width * box.height
return res
}
func main() {
var (
len float64
width float64
height float64
)
fmt.Println("输入长 宽 高:")
fmt.Scanln(&len, &width, &height) //1.1 2.0 3.0
box := Box{len, width, height}
fmt.Println("体积=", fmt.Sprintf("%.2f", box.getVolume())) //体积= 6.60
}
案例三:
要求:(1)一个景区根据游客的年龄收取不同价格的门票,假如年龄大于18,收费20元,其它情况门票免费;(2)请编写Visitor结构体,根据年龄段决定能购买的门票价格并输出
type Visitor struct {
Age int
}
func (visitor Visitor) ticket() {
var ticketPrice int
if visitor.Age >= 75 || visitor.Age <= 8 {
fmt.Println("为了安全,建议不要独自玩")
return //返回,不再执行下面的代码了
}
if visitor.Age > 18 {
ticketPrice = 20
} else {
ticketPrice = 0
}
fmt.Printf("Visitor购买门票费为:%v元\n", ticketPrice)
}
func main() {
var v Visitor
for {
fmt.Println("年龄:")
fmt.Scanln(&v.Age)
if v.Age == 999 {
fmt.Println("退出程序....")
break
}
v.ticket()
}
}