派生表中第一个基类没有虚函数,派生类存在虚函数时的内存布局
Posted lakeone
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了派生表中第一个基类没有虚函数,派生类存在虚函数时的内存布局相关的知识,希望对你有一定的参考价值。
单继承的例子:
#include <iostream> using namespace std; class A { public: A() { a = 1; ch = \'a\'; //ASCII码97 } private: int a; char ch; }; class C : public A { public: C() { c = 3; } virtual void print() { cout << "C" << endl; } private: int c; }; int main() { C c; int *p = (int *)&c; for (int i = 0; i < 4; i++) { cout << p[i] << endl; } //C的内存布局: //vptr //a //ch后面填充了3个字节 //c return 0; }
实验结果:
结论:单继承情况下基类没有虚函数,派生类存在虚函数时,派生类的vptr会被放在最前面,接着是基类数据成员,然后是派生类数据成员。
多重继承的例子:
以上是关于派生表中第一个基类没有虚函数,派生类存在虚函数时的内存布局的主要内容,如果未能解决你的问题,请参考以下文章