C++多态实现原理详解

阅读引言: 我想象了一下, 假如人有突然问我什么是多态, 我该如何给别人说清楚呢?所以写下这篇文章, 希望大家看完有所收获。

目录

①. 开胃小菜

②. 多态常见的一个小小面试题

③, 虚函数指针虚函数表

④. 多态的理解

⑤, 问题


①. 开胃小菜

先看这样一个开胃小菜

这里我有点小小的疑惑, 大小为啥是1。

在C++中,结构体(struct)A的对象a的大小为1的原因可能是因为编译器对结构体进行了内存对齐。默认情况下,C++编译器会将结构体的起始地址与最大成员的对齐要求进行对齐。在这个例子中,结构体A是空的,没有任何成员,所以编译器将其大小设置为1字节,以满足内存对齐的要求。

结构体对齐, 大小为1, 1是不是能被任意的地址整除, 这是结构体对齐的知识。

②. 多态常见的一个小小面试题

假设使用上面的类实例化出一个类对象, 使用sizeof求该对象的大小?

结果为12个字节,这里使用的是32位环境。


为什么多出了四个字节呢?这多出来的四个字节是啥?为什么需要这个四个字节的空间, 用来干什么?


1,因为当一个类中出现虚函数的时候, 无论是自己本身的还是继承来的, 都会多出四个字节的空间, 这四个字节的空间其实是一个指针, 专业名词叫做虚函数表指针, 用来指向虚函数表。虚函数表指针(vptr)、虚函数表后面会介绍。

2, 这多出来的四个字节就是一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@daiwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值