• 软件测试技术
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘

字号: | 推荐给好友 上一篇 | 下一篇

细谈C++多态性的“动”与“静”

发布: 2008-6-10 16:33 | 作者: 不详 | 来源: 天极网 | 查看: 62次 | 进入软件测试论坛讨论

领测软件测试网 软件测试技术网} S]5\[]([4r

uP#O}R  在很多书上都已经说明了C++的对象模型,这里只是做个验证。看看这段代码:

7].j\er)q1H9_ 软件测试技术网:X*KAg-M g+[

  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()
+R0e3G N~V(a{G  ...{软件测试技术网9I.{"j)FlO2c3tx
  cout << "call C11 Test()" << endl;
a~cq{@A qO  }软件测试技术网^2?9n&J8dPW&]'K
  };软件测试技术网^:QQ2V?m/S

6{GDibg  class C12 : public C1软件测试技术网[@a1oD2R,e)Sk
  ...{
,U W&u!C"|KTJ  public:软件测试技术网:c.Q(\] j j
  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

  // 验证首地址
Tt1T qca  C11 obj110;
z[@,Q&\F}+Y  C11 obj111;软件测试技术网 ^sZ ?+SZ

软件测试技术网7J