zoukankan      html  css  js  c++  java
  • Golang之面向对象和指针

    武大郎,来十个烧饼。。。

    package main
    
    import "fmt"
    
    type Integer int
    
    //为内置的int类型增加了新方法less,面向对象写法
    func (a Integer) Less(b Integer) bool {
        return a < b
    }
    func Integer_Less(a Integer, b Integer) bool {
        return a < b
    }
    
    //Go的面向对象,如果需要修改对象,必须用指针,这不是Go约束,还是自然约束
    func (a *Integer) Add(b Integer) {
        *a += b
    }
    
    //Integer类型是一个int,为int起一个别名Integer,
    //             并且增加一系列方法Add,Add2,又编程了一个新的类型,这个类型还完全拥有int的功能
    //传递值而不是指针
    func (a Integer) Add2(b Integer) {
        a += b
        fmt.Println(a)
        fmt.Println(b)
    }
    
    
    func main() {
        var a Integer = 1
        if a.Less(2) {
            fmt.Println(a, "Less 2")
        }
        if Integer_Less(a, 2) {
            fmt.Println(a, "Less 2")
        }
        //为Integer又加了Add方法,Add()方法需要修改对象的值,需要指针引用
        //a.Add(2)
        //fmt.Println("a=", a)
        //实现成员方法传入的如果不是指针,而是值,也就是Integer,而非*Iteger,,这时a=1
        a.Add2(2)
        fmt.Println("a=", a)
        //Go语言和C语言一样,类型都是基于值传递,想要修改变量的值,只能传递指针
    }
    
    /*
    Go语言中没有隐藏的this指针
    方法施加的目标(“对象”)显示传递,没有被隐藏
    方法施加的目标(“对象”)不需要非得是指针,也不用非得叫this
    
    */

     大郎说,烧饼放在家里了

    //值语义和引用语义
    //b=a
    //b.Modify()
    //如果b的修改,不影响a的值,那么此类型就是值类型
    //如果会影响a的值,那么此类型就是引用类型
    //Go语言大多类型都是值语义
    //基本类型:byte、int、bool、float32、float64、string等
    //复合类型:数组(array)、结构体(struct)和指针(point)
    //数组被完整的复制,就是值语义
    
    func main() {
    var a=[3]int{1,2,3}
    var b=a //表示b=a赋值语句,是数组内容的完整复制
    b[1]++
    fmt.Println(a,b)
    }
    
    //引用方法,需要使用指针
    func main() {
        var a = [3]int{1, 2, 3}
        var b = &a //这句赋值,是数组内容的引用,变量b类型是*[3]int类型
        b[1]++
        fmt.Print(a, *b)
    }
  • 相关阅读:
    匈牙利算法——S.B.S.
    洛谷P1328 生活大爆炸版石头剪刀布——S.B.S.
    洛谷P1101 单词方阵——S.B.S.
    noip2010提高组3题题解 by rLq
    洛谷P1605 迷宫——S.B.S.
    yii2.0 curd操作
    我常用的linux命令
    常用css
    ln 软链
    crontab下git命令无效
  • 原文地址:https://www.cnblogs.com/pyyu/p/8250505.html
Copyright © 2011-2022 走看看