面向对象编程应用实例

面向对象编程应用实例

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()
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值