zoukankan      html  css  js  c++  java
  • 面向对象之方法1

    基本介绍:

      在某些情况下,我们要需要声明(定义)方法。比如Person 结构体:除了有一些字段外(年龄,姓名...),Person结构体还有一些行为比如:可以说话、跑步...,通过学习,还可以做算术题。这时就要用方法才能完成。

      Golang中的方法是作用在指定的数据类型上的(即:和指定的数据类型绑定),因此自定义类型,都可以有方法,而不仅仅是struct


    方法的声明和调用:

    type A struct {
      Num int
    }

    func (a A) test() {
      fmt.Println(a.Num)
    }

    对上面的语法的说明:

    1)func (a A) test() {} 表示 A结构体有一个方法,方法名为test
    2)(a A) 体现 test 方法是和 A类型绑定的

    举例说明:

    type Person struct {
      Name string
    }

    //给Person类型绑定一个方法
    func (p Person) test() {
      fmt.Println("test() name=", p.Name)
    }

    type Dog struct {

    }

    func main() {

      var p Person
      p.Name = "tom"
      p.test() //调用方法

      //下面的使用方式都是错误的
      var dog Dog
      dog.test()
      test()

    }

    对上面的代码做说明:

    1)test 方法和 Person 类型绑定

    2)test 方法只能通过 Person 类型的变量来调用,而不能直接调用,也不能使用其他类型的变量来调用。

    3)func (p Person) test() {}... p 表示那个 Person 变量调用,这个p 就是它的副本。和函数传参非常相似。

    4)p 这个名字,由程序员指定,不是固定的。比如修改成 person 也可以。


    type Person struct {
      Name string
    }

    //给Person类型绑定一个方法
    func (p Person) test() {
      p.Name = "jack"
      fmt.Println("test() name=", p.Name) //输出jack
    }

    func main() {

      var p Person
      p.Name = "tom"
      p.test() //调用方法
      fmt.Println("main() p.Name=", p.Name) //输出tom

    }

    快速入门: 

    1)给Person结构体添加speak 方法,输出 xxx是一个好人

    案例:

    type Person struct {
      Name string
    }

    func (p Person) speak() {
      fmt.Println(p.Name, "是一个goodman")
    }

    func main() {

      var p Person
      p.Name = "tom"
      p.speak()
    }

    2)给Person结构体添加jisuan 方法,可以计算从 1+..+1000的结果

    案例:

    type Person struct {
      Name string
    }

    func (p Person) jisuan() {
      res := 0
      for i := 1; i <= 1000; i++ {
        res += i
      }
      fmt.Println(p.Name, "计算的结果是=", res)
    }

    func main() {

      var p Person
      p.Name = "tom"
      p.jisuan()
    }

    3)给Person结构体添加jisuan2方法,该方法可以接收一个数n,计算从1+..+n的结果

    案例:

    type Person struct {
      Name string
    }

    func (p Person) jisuan2(n int) {
      res := 0
      for i := 1; i <= n; i++ {
        res += i
      }
      fmt.Println(p.Name, "计算的结果是=", res)
    }

    func main() {

      var p Person
      p.Name = "tom"
      p.jisuan2(20)
    }

    4)给Person结构体添加getSum方法,可以计算两个数的和,并返回结果。

    案例:

    type Person struct {
      Name string
    }

    func (p Person) getSum(n1 int, n2 int) int {
      return n1 + n2
    }

    func main() {

      var p Person
      p.Name = "tom"
      res := p.getSum(10, 20)
      fmt.Println("res=", res)
    }

    5)方法的调用

      p.speak()
      p.jisuan()
      p.jisuan2(20)
      res := p.getSum(10,20)
      fmt.Println("res=", res)

  • 相关阅读:
    是否需要有代码规范
    小学四则运算生成程序(支持分数)总结
    HDU 4035 Maze 期望dp
    UVA
    HDU 3853 LOOPS 期望dp
    POJ 2096 Collecting Bugs 期望dp
    HDU 4405 Aeroplane chess 期望dp
    Codeforces Round #341 (Div. 2) E. Wet Shark and Blocks dp+矩阵加速
    HDU 4616 Game 树形dp
    HDU 4126 Genghis Khan the Conqueror 最小生成树+树形dp
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11408117.html
Copyright © 2011-2022 走看看