1
2
实验环境: windows10 x64  VS2019
我们来分析最基本的 单继承
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>


class Base {
public:
virtual void show() {
std::cout << "Base show.\n";
}
virtual ~Base() {}
int a = 1;
int b = 2;
};

class CTest : public Base {
public:
void show() {
std::cout << "CTest show.\n";
}
};

int main() {
Base b;
b.show();

Base* pTest = new CTest();

pTest->show();
delete pTest;
pTest = nullptr;

return 0;
}


1
1.可以看到pTest的地址是0x0021ab4c,也是导入表的地址


1
2.导入第一个地址:0x00211573,即 CTest::show的地址


1
3.切换到汇编验证一下


1
2
4.这里eax就是CTest::show的地址,和 上边通过导入表看到地址是一样的,都是0x00211573,也就演示了虚表中,
成员的存放方式


 评论