阅读引言: 我想象了一下, 假如人有突然问我什么是多态, 我该如何给别人说清楚呢?所以写下这篇文章, 希望大家看完有所收获。
目录
①. 开胃小菜
先看这样一个开胃小菜
这里我有点小小的疑惑, 大小为啥是1。
在C++中,结构体(struct)A的对象a的大小为1的原因可能是因为编译器对结构体进行了内存对齐。默认情况下,C++编译器会将结构体的起始地址与最大成员的对齐要求进行对齐。在这个例子中,结构体A是空的,没有任何成员,所以编译器将其大小设置为1字节,以满足内存对齐的要求。
结构体对齐, 大小为1, 1是不是能被任意的地址整除, 这是结构体对齐的知识。
②. 多态常见的一个小小面试题
假设使用上面的类实例化出一个类对象, 使用sizeof求该对象的大小?
结果为12个字节,这里使用的是32位环境。
为什么多出了四个字节呢?这多出来的四个字节是啥?为什么需要这个四个字节的空间, 用来干什么?
1,因为当一个类中出现虚函数的时候, 无论是自己本身的还是继承来的, 都会多出四个字节的空间, 这四个字节的空间其实是一个指针, 专业名词叫做虚函数表指针, 用来指向虚函数表。虚函数表指针(vptr)、虚函数表后面会介绍。
2, 这多出来的四个字节就是一