面向对象

概念
image.png
一个很形象的图
image.png

  • 匿名组合

image.png
一个结构引用另一个结构体的成员,继承全部

  • 匿名字段的初始化
  • 顺序初始化
    image.png
  • 自动推导型
    image.png
    image.png
  • %+v :显示更加详细,继承自哪里都显示出来
  • 指定成员初始化
    image.png
    image.png
  • 指定匿名字段的值
    image.png
    image.png
  • 注意
    匿名字段的使用,不能直接顺序指定值 S5:=Student{"yy",'m',18....}
    这样子是无法编译的image.png
  • 成员的操作
  • image.pngimage.png
    image.png
  • 指定匿名字段的值
    image.png
    类似于py,直接变量.成员名,就可以对其进行取值及赋值
  • 同名字段处理
  • 当两个结构体中有同名字段,进行赋值时,遵循就近原则,作用域的选择
    image.png
    image.png
    可以看到匿名字段中的name为空,主结构体中的name被赋值
    如果要指定匿名结构体中的成员,就要进行显示指定
    image.png
  • 非结构体匿名字段

image.png
image.png

  • 结构体指针类型

image.png
声明跟取地址,拿到的是一串内存地址,
shi
当单个拿出来之后
image.png
image.png
也可以使用new进行声明
image.png
image.png

  • 方法

image.png
接受者可以使用指针类型,但是接受者的本类型不能是指针类型。
原来的面向过程型
image.png
image.png
面向对象型
tmp就是原先的a,后面的other就是原来的b
image.png
调用
image.png
image.png
为结构体类型添加方法
image.png
image.png

  • 指针类型
    image.png
    通过接口函数给其赋值
    image.png
  • 值语义和引用语义

    • 值语义
      image.png
      image.png
      传入的是值
      image.png
      可以看到,s1的地址在声明初和调用函数时地址是不一样的,函数调用的那部分相当于是s1的一个拷贝。
      而且传入值改变内部成员,只能在函数内部生效,在函数外还是没有改变
      %p 打印地址
    • 引用语义
      image.png
      image.png
      image.png
      可以看到两个变量的地址是一样的,传递的是指针,(地址),变量经过函数调用之后也改变了
  • 方法集

image.png
image.png
还可以这样,编译器内部自动转换
image.png
普通调用方式,也可以调用指针。

  • 方法的继承

image.png
image.png

  • 方法的重写

image.png
image.png
新的机构体实现了一个与原结构函数名相同的函数,在新结构体调用该函数时,就会就近使用本身实现的同名函数,如果要使用原结构体的函数,就可以显式的调用,新结构以变量名.原结构体名称.函数名()

  • 方法值

image.png
与传统调用相比,就是把 结构体变量名.函数名() 变成 结构体变量名.函数名,用一个变量来保存,这个变量就是方法值,保存的是未调用的方法。 要真正调用时采用方法值()进行调用。
image.png

  • 方法表达式

image.png
方法表达式跟方法值相比,省去了声明变量,直接在表达式使用结构体。在调用时再传入变量

  • 接口

image.png
定义
image.png
image.png
image.png
image.png
调用
image.png
image.png
接口的继承
image.png
image.png
image.png
image.png

  1. 接口转换
    image.png
  2. 子集转不了超集,会提示如下报错
    image.png
  3. 超集可以转子集
    image.png
    空接口
    image.png
    image.png
    类型判断
    使用if来判断
    image.png
    当类型是结构体时,value返回的就是整个结构体对象,结构体内的成员可以使用value.成员名打印出来
    image.png
    使用switch来判断
    image.png
    switch声明一个变量来接受值.type()
    image.png
原文地址:https://www.cnblogs.com/cizao/p/11482008.html