加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
11.6-pointer-interfaces.go 1.03 KB
一键复制 编辑 原始数据 按行查看 历史
Letotn 提交于 2023-01-06 23:34 . update pracitce 11.7
package main
import (
"fmt"
"math"
)
// 继续 10.3 中的练习 point_methods.go,定义接口 Magnitude,它有一个方法 Abs()。
// 让 Point、Point3 及 Polar 实现此接口。通过接口类型变量使用方法做 point.go 中同样的事情。
type Magnitude interface {
Abs() float32
}
type Point struct {
x, y float32
}
type Point3 struct {
x, y, z float32
}
func (p *Point) Abs() float32 {
return float32(math.Sqrt(float64(p.x*p.x + p.y*p.y)))
}
func (p *Point) Scale(f float32) {
p.x *= f
p.y *= f
}
func (p *Point3) Abs() float32 {
return float32(math.Sqrt(float64(p.x*p.x + p.y*p.y + p.z*p.z)))
}
func (p *Point3) Scale(f float32) {
p.x *= f
p.y *= f
p.z *= f
}
type Polar struct {
R, Theta float32
}
func (p *Polar) Abs() float32 {
return p.R
}
func AbsLess(a, b Magnitude) bool {
return a.Abs() < b.Abs()
}
func main() {
var p2 = new(Point)
p2.x = 14.0
p2.y = 15.0
p3 := &Point3{7, 7, 7}
if AbsLess(p2, p3) {
fmt.Println("p2 Abs less than p3")
} else {
fmt.Println("p3 Abs less than p2")
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化