24c++多肽

虚函数在哪?虚函数表存那在哪?堆?栈?静态区?代码段?

虚函数和普通函数一样一样,都是存在代码段,同事吧虚函数地址存了一份到虚函数表

虚函数表在哪呢?不会在栈,或栈,堆是动态分配,没有分配和释放

打印虚表的地址 

虚函数地址在代码段(常量区)跟下面的普通函数的地址是放在一起的

 虚函数的地址一定会被放到虚函数表里面么 ?

重写了fun1所以d中1地址变了2没变(继承下来)但是没有3,4,  5不是虚函数

base不一定是唯一父类,Derive也可能是某个子类的父类

derive的子类也没有fun3,但是可以实现多肽,但是虚表里面没有

这个时候我们应该怀疑监视窗口,监视窗口已经被工程师处理过了 

函数指针typedef后类型定义函数指针

打印虚表

 

其实参数这个地方没有数组只有指针所以传指针  

所以虚表里是存了所有函数的

f()通过函数指针调用这个函数((*f)()也可以调用

 &d(derive*)取到derive的地址(包括虚函数指针a,b)转成int*(指针类型决定看多大)取前四个再解引用就是头上的四个字节再强转

 然后传给函数指针

如果是64位把int改成long(long不行64位也是4个字节) long

多继承(虚表)

继承了base1和base2重写了func1,有两个虚表 ,因为p1->func1()可能是base1,也可能是base2

直接切片给base2(子类给父类),他放在了第一个虚表

两个虚表重写的func1的地址不同 

 

bc继承A,d继承bc,两张虚表

a里面有虚函数,b,c继承b,c含虚表,d继承b,c,d有两张虚表

如果D里面有个func2他放在第一张虚表里面

_a是公共的有一张表,B,C一个是虚函数表,另一个地址是虚基表计算偏移量指向_a

 内联函数 加载虚函数前面

如果是多肽调用就不起作用(该怎么走就怎么走),如果是多肽调用还是直接在执行处展开

静态成员函数没有this指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值