BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #30717同步于 2009/11/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求教一个关于虚函数的问题,代码较简单,主要是概念不熟

CanFly
2009/11/1镜像同步1 回复
本人主做java和C,对于C++的基本概念实在掌握得不好,真心求教…… # include "hello.h" class A { public : int func(int pp) { cout<<"hello!A"; return pp; } }; class B:public A { public: int ff() { return func(7); } virtual int func(int pp) { cout<<"hello!B"; return pp; } }; class C:public B { }; class D:public C { public: int func(int pp) { cout<<"hello!D"; return pp; } }; int main() { D d; cout<<d.A::func(5)<<endl; cout<<d.B::func(6)<<endl; cout<<d.B::ff()<<endl; cout<<d.func(8)<<endl; return 0; } 打印出来的答案是 hello!A5 hello!B6 hello!D7 hello!D8 个人对于hello!B6这个不是很明白,既然func也是虚函数,为啥不执行动态联编,不是hello!D6呢…… cout<<d.B::func(6)<<endl; cout<<d.B::ff()<<endl; 这两句除开参数不同,有什么区别呢? 多谢赐教……
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
allen0308机器人#1 · 2009/11/1
cout<<d.B::func(6)<<endl; 没用指针,当然不会动态绑定,即使使用指针,你指定了函数查找的范围B,当然也会调用class B的 cout<<d.B::ff()<<endl; 传给ff()隐含this指针的是class D的对象,再将其传给其中的func(7),自然调用class D中的func 这个例子跟动态绑定一点关系没有,而完全是名字查找规则 【 在 CanFly 的大作中提到: 】 : 本人主做java和C,对于C++的基本概念实在掌握得不好,真心求教…… : # include "hello.h" : class A : ...................