C++中虚函数的问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 05:39:26
书上说只有通过引用或指针访问对象的虚函数才进行动态绑定。
可是书上有个例题中却是这样的:A类里面有个void f(){},void g(){}和void h(){f();g();},f被定义为虚函数,B是A的派生类。B里面有个重定义的f函数,然后新建一个B b的类对象,调用b.h();为什么后面注释里说是调用了A::h,B::f,A::g,按说这里没有通过指针或引用调用函数,应该调用A::f才对啊,不解!!!大家帮忙

非静态的成员函数都有一个隐含的this指针..
void h(){f();g();}
相当于
void h(){this->f();this->g();}
所以f, 仍然是通过指针调用的..

仅供参考啊,朋友
具体解释如下:首先你需要看一下http://baike.baidu.com/view/161302.htm
这里面的解释会让你豁然开朗的吧,
新建一个B b的类对象,调用b.h();怎么会没有引用呢?新建对象是怎么出来的呢?是通过栈new的指针指向堆的内存空间一块区域。然后创建对象。我是这样理解的,希望对你有所启示。我理解错了的话,麻烦你跟我说一声啊。谢谢!

都说了F在A里面是虚函数,我靠。在A里面F都虚了咋调用,当然是调用B里面重定义的F啦。