递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 719|回复: 1
打印 上一主题 下一主题

[其它] 静态就像一套锁的锁身,动态就像一套锁的多个钥匙

[复制链接]

143

主题

898

帖子

3635

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3635
QQ
跳转到指定楼层
楼主
发表于 2023-11-27 12:33:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 朕的 于 2023-11-27 12:37 编辑

有时候静态、动态很晕,现在整明白了些:静态就像一套锁的锁身,动态就像一套锁的多个钥匙;
操作锁不需要实例化,因为就有一个锁【静态】,


操作钥匙就需要实例化,因为就有可能有很多把钥匙【动态】


或者比喻:皇帝【静态】 妃子【动态】

皇帝只有一个,无论怎么创建都是这个皇帝,妃子可以有无数个,是动态,所以操作皇帝【静态】,直接调用,操作妃子【动态】要实例化规范到哪个妃子


说白了就是静态变量、方法, 无论创建派生多少个类,所有的类都是公用的它,所以不需要时实例化类即可直接操作,

动态变量跟随每个类都会有独立的这个变量,所以要实例化后操作指定的动态变量。


不知道这样比喻准不准确。
基类基类实例化A基类实例化B
静态基类的静态基类的静态
动态A的动态B的动态





白天不懂夜的黑
回复

使用道具 举报

7

主题

242

帖子

1941

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1941
沙发
发表于 2023-11-27 14:17:36 | 只看该作者
要理解类的静态和动态,很简单,c++的类和struct是一个东西,唯一的区别就是结构成员的默认为公开,而类的成员默认为不公开,这样看就简单了,静态和动态其实就是看它的成员变量是何时申请的内存,其中全局静态是在程序入口函数执行之前就初始化内存了,局部静态变量是在调用该方法时才初始化内存的,其中c++11标准保证了局部静态变量的同步锁防止多线程多次初始化,而动态就跟我们使用结构体是一样的,在需要的时候初始化内存。     把类class和结构struct当成一样就好理解了,都是换汤不换药,本质还是成员变量的内存空间问题。     而虚拟方法的动态又不一样,它是在子类初始化时才动态挂接到基类对象的,会在类初始化时动态的修改虚表指针,所以才能实现基类去调用子类的方法。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-6-3 17:33 , Processed in 0.078686 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表