领测软件测试网
软件测试技术网} S]5\[]([4r
uP#O}R 在很多书上都已经说明了C++的对象模型,这里只是做个验证。看看这段代码:
7].j\er)q1H9_
软件测试技术网:X*KAg-Mg+[ class C1软件测试技术网
h ]i"jYsV]
...{
O]V!X7Lc8g&] public:软件测试技术网%S"NlBJeo#^B
virtual void Test()软件测试技术网/r'l?w*t
...{软件测试技术网%|$m]};nU|yb
cout << "call C1 Test()" << endl;软件测试技术网j*[,u'K/[^7a0gW
}软件测试技术网~D&x|7Z&MJqI&t
};软件测试技术网1p*Om EV5X$@'|Y#Me
软件测试技术网C0aZ'R`i#A9W class C11 : public C1
S-nP,g.u/M:N ...{
Wuu/a/O8k7I public:
9C5q2W i*hv/nx void Test()
+R0e3GN~V(a{G ...{软件测试技术网9I.{"j)FlO2c3tx
cout << "call C11 Test()" << endl;
a~cq{@AqO }软件测试技术网^2?9n&J8dPW&]'K
};软件测试技术网^:QQ2V?m/S
6{GDibg class C12 : public C1软件测试技术网[@a1oD2R,e)Sk
...{
,U W&u!C"|KTJ public:软件测试技术网:c.Q(\] jj
void Test()软件测试技术网Eq_9mC!E9@9n
...{
6@*mbF6VZ7t cout << "call C12 Test()" << endl;软件测试技术网m"]+`zr&Y$t
}
,m8_!f#oR }; 软件测试技术网Po)IP2`a3B~
软件测试技术网$o(UxS5e@ 我们可以知道 Test() 是虚函数,从C1派生的类必定有自己的虚表。而且根据别的资料,虚表指针是放在对象的首地址的,我们下面就来验证一下:软件测试技术网t {1urB[x9E
软件测试技术网,f/K,SKA // 验证首地址
Tt1Tqca C11 obj110;
z[@,Q&\F}+Y C11 obj111;软件测试技术网 ^sZ
?+SZ
软件测试技术网7J