首页 币圈新闻 go语言面向对象编程之类型系统(添加方法)

go语言面向对象编程之类型系统(添加方法)

一.提前感受go语言的面向对象

1.入门案例:求两点间距离

main(???)Point?{???X,?Y?float64}Distance(q,?p?Point)?float64?{???math.Hypot(q.X?-?p.X,?q.Y?-?p.Y)}(this?Point)?Distance??(another?Point)?float64?{???math.Hypot(this.X?-?another.X,?this.Y?-?another.Y)}main()?{???point1?:=?Point{,?}???point2?:=?Point{,?}???fmt.Println(Distance(point1,?point2))???fmt.Println(point1.Distance(point2))}假设你是一个懂C++、java或者其他编程语言的人,咱们以大家比较熟悉java语言为例,先说明类型系统是什么样的,其实在java这样的语言,存在两套完全独立的类型系统:一套值类型系统,主要是基本类型,如byte,int,boolean,char?double等,这些类型是基于值语义;一套以Object类型为根的对象类型系统,这些类型可以定义为成员变量与成员方法,可以有虚函数,基于引用语义,只允许使用new关键字在堆上开辟空间。java中的Any类型就是整个对象类型系统的根–Object类型。???相比之下,

2.go语言的类型系统

类型系统是只一个语言的类型体系结构,正常情况下,一个典型的类型系统应该包含以下基本内容:????1).基础类型????2).复合类型????3).可以指向任意对象的类型(Any类型(如java里面的Object,?go里面的interface{}))????4).值语义和引用语义????5).面向对象,即所有具备面向对象特征(比如成语方法)的类型????6).接口mainInteger?intInteger_Less(a?Integer,?b?Integer)?bool?{???a?<?b}(num?Integer)?Less?(b?Integer)?bool?{???num?<?b}main()??{???a?Integer?=?a.Less()?{??????fmt.Println(a,?)???}???Integer_Less(,?)?{??????fmt.Println()???}}????正常来说,go语言面向对象最为直观,也无需额外内存消耗,如果要求对象以指针传递的话会有额外开销,因为对象本身有时很小(比如4个字节),用指针传递并不划算。只有需要修改值的时候,才会使用指针。(a?*Integer)?Add?(b?Integer)??{???*a?+=?b?}

添加方法完整案列:

mainInteger?intInteger_Less(a?Integer,?b?Integer)?bool?{???a?<?b}

(num?Integer)?Less?(b?Integer)?bool?{???num?<?b}

(a?*Integer)?Add?(b?Integer)??Integer?{???*a?+=?b?*a}

(a?Integer)?AddOne?(b?Integer)??{???a?+=?b?fmt.Println(a)}

main()??{???a?Integer?=?a.Less()?{??????fmt.Println(a,?)???}???Integer_Less(,?)?{??????fmt.Println()???}???fmt.Println(a.Add())???a.AddOne()}

关于作者: szhbsd

热门文章