c++结构体定义和使用_[day day go]结构体&给结构定义方法

77930e2f6ccfea1bbdb0b6783ceff9d7.png

结构体

//定义
type treeNode struct {
	value       int
	left, right *treeNode
}

//工厂函数创建
func createNode(value int) *treeNode {
	return &treeNode{value: value} //这里返回的是局部变量的地址给外部使用(在go这样子可以的)
}

func main() {
	var root treeNode
	fmt.Println(root)


	//创建
	root = treeNode{value: 3}
	root.left = &treeNode{}
	root.right = &treeNode{5, nil, nil}
	root.right.left = new(treeNode)
	fmt.Println("root:",root)
	fmt.Println("root.right:",root.right)
	fmt.Println("root.right.left:",root.right.left)

	nodes := []treeNode{
		{value: 3},
		{},
		{6, nil, &root},
	}
	fmt.Println("nodes:",nodes)
	
	root.left = createNode(2)
	fmt.Println("createNode:",root)
}
{0 <nil> <nil>}
root: {3 0xc00007c060 0xc00007c080}
root.right: &{5 0xc00007c0a0 <nil>}
root.right.left: &{0 <nil> <nil>}
nodes: [{3 <nil> <nil>} {0 <nil> <nil>} {6 <nil> 0xc00007c020}]
createNode: {3 0xc00007c060 0xc00007c080}
  • go仅支持封装,不支持继承和多态
  • 结构体的创建:不论地址还是结构本身,一律使用.来访问成员
  • 结构体放在堆还是栈是由go的运行机制以及环境决定的,编程者不用关心

给结构定义方法

func (node treeNode) print()  {
	fmt.Print("这是结构体方法打印出来的:",node.value)
}

func (node *treeNode) setValue(value int) {
	if node == nil {
		fmt.Println("setting value to nil node")
		return
	}
	node.value = value
}


//值不会变
// func (node treeNode) setValue(value int) {
// 	node.value = value
// }

func (node *treeNode) setValue(value int) {
	node.value = value
}
        root.print()

	fmt.Println("nsetValuen")
	root.right.left.setValue(9)
	root.right.left.print()
这是结构体方法打印出来的:3
setValue

这是结构体方法打印出来的:9
func(【结构体】) 【函数名】(){}
  • func后面括号的是方法接收者(其实就跟函数的返回值一样)
  • 只有使用指针才可以改变结构的内容
  • nil指针也可以调用方法(可以将值传进来,但是nil的赋值会报错,需要做return处理)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值