- 博客(20)
- 收藏
- 关注
原创 【C++】多态功能细节问题分析
每一个区都是以块的组织方式进行存贮,所以我们只需要比较虚表的地址与a\ap\as\s哪个变量的地址更加靠经就基本能判定b的虚表存储在哪个区。如果基类的析构函数不是虚函数,在通过基类指针删除派生类对象时,只会调用基类的析构函数,而不会调用派生类的析构函数。如果基类的析构函数被声明为虚函数,那么通过基类指针删除派生类对象时,首先会调用派生类的析构函数,然后是基类的析构函数。值得注意的是,虚表的存贮位置是值得讨论的,很多人博客的表述及通义千问都是认为虚表是存储在静态区,但是从实际操作来看似乎有些问题。
2025-04-03 16:07:52
847
原创 【C++继承】关于继承的细节分析
代码如下更改,derived1和derived2分别打印baseValue的地址,会发现两边的地址不同,即derived1和derived2继承的于Base的baseValue是分开的,可以得出结论——直接继承,在那条继承通道上会产生各自的继承副本,数据与其他继承通道是不共享的。其实隐藏是很好理解的,即就近原则,在Derived1中有getVal()函数,则Derived1中的getVal()函数是更加靠近d1的,所以会优先调用Derived1中的getVal()。:消除了由于多重继承引起的二义性问题。
2025-04-02 22:11:19
433
原创 【C++】论malloc与new在计算机底层的相同点和不同点
1、相同点newdeletemallocfreenew是C++特有的动态空间申请方法,new可以理解为是以对象为单位去申请空间,但是new一个对象时会调用对象的构造函数进行初始化。如下图所示,都是通过new申请的空间并自动调用构造函数进行初始化,同时将对象的地址给d1和d2。当然如果使用new去申请一个对象数组,申请的形式与上图稍有差别,如下图所示,在C++11中允许使用花括号去初始化对象数组,当然如果不使用花括号编译器也会自己调用对象的构造函数去初始化数组中的每个对象。
2025-03-01 21:07:33
302
原创 C++:模板
在预处理、编译、汇编、链接的过程中,声明在编译时都可以通过,但是没有地址,只有在链接时拿着修饰后的函数名去其他符号表查找。对于情况3,原理如下:由于在**.o文件中由于模板,在该文件中由于模板不能实例化,不能生成地址,所以在符号表中查不到链接。模板可以减少代码量,可以理解为“一个瓶子可以装多种酒”,如下图所示是一个输出的模板,可以对多种类型进行。特化可以理解为为一般的方法增加特殊版本,这样就能让在特殊的情况也能照样使用。2、函数链接没查到,因为函数没有定义。3、函数链接查不到,但是函数定义了。
2024-03-25 21:49:24
241
原创 C++:容器适配器、deque、优先队列、反向迭代器
deque是一个双端队列,但是又与一般队列的性质不同,deque可以头插头删,也可以访问任意一个位置的数据,可以说vector和list的方法deque都有,但是deque有较多的坑。可以使用正向迭代器去封装反向迭代器,正向迭代器和反向迭代器是对称的,在反向迭代器中进行*操作是解引用前一个位置。所以高频的头插头删是适合deque的,deque用来适配stack和queue的默认容器是合适的。但是[]不够极致,计算在哪个buff,在哪个buff的第几个。1、先看在不在第一个buff数组,在就找位置。
2024-03-21 17:07:14
200
1
原创 【操作系统】FIFO先进先出页面置换算法(C语言实现)
FIFO页面置换算法,计算缺页率,文末附代码。模拟内存的页式管理,实现内存的分配和调用,完成虚拟内存地址序列和物理内存的对应。
2022-12-05 19:18:14
13440
6
原创 我妹问我函数有什么用,我专门举了汉诺塔问题的例子,我奶奶看了都说好!!!
我妹问我函数有什么用,我专门举了汉诺塔问题的例子,我奶奶看了都说好!!!
2022-10-19 21:27:26
363
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人