朕的 发表于 2023-11-27 12:33:14

静态就像一套锁的锁身,动态就像一套锁的多个钥匙

本帖最后由 朕的 于 2023-11-27 12:37 编辑

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


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


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

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


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

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


不知道这样比喻准不准确。

基类基类实例化A基类实例化B
静态基类的静态基类的静态
动态A的动态B的动态





tmf19901124 发表于 2023-11-27 14:17:36

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