没有虚函数时
/// @file test_class.c
/// @brief 测试一个类有多个基类的内存布局(没有虚函数时, 有虚函数时)
#include <stdlib.h>
#include <stdio.h>
class CA {
public:
CA() : iA(1) {}
int iA;
};
class CB : public CA {
public:
CB() : iB(2) {}
int iB;
};
class CC : public CB {
public:
CC() : iC(3) {}
int iC;
};
void fnTest()
{
CC a;
/**
0018FEE4 01 00 00 00 .... ///< 顶层基类CA数据
0018FEE8 02 00 00 00 .... ///< 基类CB数据
0018FEEC 03 00 00 00 .... ///< 本类CC数据
*/
}
int main(int argc, char *argv[])
{
fnTest();
return 0;
}
有虚函数时
/// @file test_class.c
/// @brief 测试一个类有多个基类的内存布局(没有虚函数时, 有虚函数时)
#include <stdlib.h>
#include <stdio.h>
class CA {
public:
CA() : iA(1) {}
virtual ~CA() {}
int iA;
};
class CB : public CA {
public:
CB() : iB(2) {}
virtual ~CB() {}
int iB;
};
class CC : public CB {
public:
CC() : iC(3) {}
virtual ~CC() {}
int iC;
};
void fnTest()
{
CC a;
/**
0018FEE4 1C 20 42 00 . B. ///< 本类CC虚函数表
0018FEE8 01 00 00 00 .... ///< 顶层基类CA数据
0018FEEC 02 00 00 00 .... ///< 基类CB数据
0018FEF0 03 00 00 00 .... ///< 本类CC数据
*/
}
int main(int argc, char *argv[])
{
fnTest();
return 0;
}