LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > go语言面向对象编程之类型系统(添加方法)

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

2021-07-02 木姜子科技 来源:区块链网络

一.提前感受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).接口 main Integer?int Integer_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?}

添加方法完整案列:

main Integer?int Integer_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() }

—-

编译者/作者:木姜子科技

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...