当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

C++对象筹划及多态之虚成员函数调用[VC/C++编程]

赞助商链接



  本文“C++对象筹划及多态之虚成员函数调用[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

在构造函数中调用虚成员函数,固然这是个不很常用的技术,但研究一下可以加深对虚函数机制及对象构造历程的理解.这个问题也和普通直观上的熟习有所差别.先看看下面的两个类定义.

struct C180
{
 C180() {
  foo();
  this->foo();
 }
 virtual foo() {
  cout << "<< C180.foo this: " << this << " vtadr: " << *(void**)this << endl;
 }
};
struct C190 : public C180
{
 C190() {}
 virtual foo() {
  cout << "<< C190.foo this: " << this << " vtadr: " << *(void**)this << endl;
 }
};

父类中有一个虚函数,并且父类在它的构造函数中调用了这个虚函数,调用时它采取了两种办法一种是直接调用,一种是通过this指针调用.同时子类又重写了这个虚函数.

我们可以来猜测一下假如构造一个C190的对象会发生什么情形.

我们知道,在构造一个对象时,首先会按对象的大小得到一块内存(在heap上或在stack上),然后会把指向这块内存的指针做为this指针来调用类的构造函数,对这块内存举行初始化.假如对象有父类就会先调用父类的构造函数(并顺次递归),假若有多个父类(多重担当)会顺次对父类的构造函数举行调用,并会得当的调整this指针的位置.在调用完好部的父类的构造函数后,再履行自己的代码.

照上面的解析构造C190时也会调用C180的构造函数,这时在C180构造函数中的第一个foo调用为静态绑定,会调用到C180::foo()函数.第二个foo调用是通过指针调用的,这时多态行为会发生,应当调用的是C190::foo()函数.

履行以下代码:

C190 obj;
obj.foo();

后果为:

<< C180.foo this: 0012F7A4 vtadr: 0045C404
<< C180.foo this: 0012F7A4 vtadr: 0045C404
<< C190.foo this: 0012F7A4 vtadr: 0045C400


  以上是“C++对象筹划及多态之虚成员函数调用[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

本文地址: 与您的QQ/BBS好友分享!
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .