golang-面向对象

2018-04-06  本文已影响23人  6a91e15c5cde

思考:go语言不支持继承与多态的优点与缺点是什么

结构的定义

type treeNode struct {
      value   int
      left, right  *treeNode
}

示例1

package main

import "fmt"

type treeNode struct {
    value int
    left,right *treeNode
}

func main(){
    var root treeNode
    fmt.Printf("%v",root)
}

输出:
{0 <nil> <nil>}

示例2

思考:
go语言函数内部,为什么可以返回局部变量
go语言的局部变量是分配在栈上还是堆上
go语言的垃圾回收机制是怎样的

自定义工厂函数
函数返回了局部变量

          3

0                      5
        2        0

package main

import "fmt"

type treeNode struct {
    value int
    left,right *treeNode
}


func createTreeNode(value int) *treeNode {
        //函数内返回了一个局部变量
    return &treeNode{value:value}
}

func main(){
    var root treeNode
    root = treeNode{value:3}
    root.left = &treeNode{}
    root.right = &treeNode{5,nil,nil}
    root.right.left = new(treeNode)
        //使用工厂函数创建了一个node
    root.left.right = createTreeNode(2)

    fmt.Printf("%v",root)
}

示例3
go语言的方法(接收者)

package main

import "fmt"

type treeNode struct {
    value int
    left,right *treeNode
}


func (node treeNode) Print(){
    fmt.Printf("%v\n",node.value)
}

func (node *treeNode) SetValue(value int){
    node.value = value
}

func (node *treeNode) traverse(){
    //中序遍历
    if node == nil {
        return
    }

    node.left.traverse()
    node.Print()
    node.right.traverse()
}

func createTreeNode(value int) *treeNode {
    return &treeNode{value:value}
}

func main(){
    var root treeNode
    root = treeNode{value:3}
    root.left = &treeNode{}
    root.right = &treeNode{5,nil,nil}
    root.right.left = new(treeNode)
    root.left.right = createTreeNode(2)

    root.left.SetValue(10)
    root.left.Print()
    root.Print()

    root.traverse()
}
上一篇 下一篇

猜你喜欢

热点阅读