返回信息流本人主做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;
这两句除开参数不同,有什么区别呢?
多谢赐教……
这是一条镜像帖。来源:北邮人论坛 / cpp / #30717同步于 2009/11/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求教一个关于虚函数的问题,代码较简单,主要是概念不熟
CanFly
2009/11/1镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
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
: ...................