[求助]虚函数的继承问题

xjyr 2008-03-15 05:57:10
# include <iostream>
using namespace std;

class A
{
public:
virtual void f()
{
cout << "A" << endl;
}
};

class B: public A //请问 B类是否也继承了A类的 f函数? 或者说B类有几个f函数?不过按输出结果来看 似乎B类既继承了// A类的f函数,同时它自己又定义一个f函数 请诸位指教
{
public:
virtual void f()
{
cout << "B" << endl;
}
};

int main(void)
{
B bb;

bb.f();
bb.A::f();

return 0;
}
/*
在Vc++6.0中的输出结果是:
----------
B
A
Press any key to continue
----------

*/
...全文
105 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chq_zml 2008-03-16
  • 打赏
  • 举报
回复
B类作为子类,是肯定继承A的成员函数的,只不过会因为B成员函数的可见性A的引用是有限制的

楼主的问题是,f函数被重写了!

zyustc 2008-03-16
  • 打赏
  • 举报
回复
继承了,每个类对象都会有个虚函数表,记录了从父类继承来的虚函数地址,在这里,B的虚函数表中,有两个f()函数的入口地址,但当B的对象调用F()时,会先调用自己定义的虚函数.
huhaihong 2008-03-16
  • 打赏
  • 举报
回复
楼上正解
Inhibitory 2008-03-16
  • 打赏
  • 举报
回复
首先, 要实现多态函数调用, 必须使用引用或者指针, 普通的对象复制是不能做到多态:
如下就可以了:
int main(void)
{
B bb;
A &a = bb;
a.f(); // 输出B

A a2 = bb;
a2.f(); // 输出A

A *pa = &bb;
pa->f(); // 输出B

return 0;
}
xjyr 2008-03-16
  • 打赏
  • 举报
回复
谢谢大家 小弟非常之感谢!
cooldo06 2008-03-15
  • 打赏
  • 举报
回复
不管是否将基类public中的函数定义为基函数或者非基函数,派生类都会继承基类中的这个函数。
定义为基函数的目的是为了动态绑定,也就是根据不同的对象绑定不同的虚函数。
IT_lau 2008-03-15
  • 打赏
  • 举报
回复
继承与覆盖
hityct1 2008-03-15
  • 打赏
  • 举报
回复
xuexi
  • 打赏
  • 举报
回复
//请问 B类是否也继承了A类的 f函数? 或者说B类有几个f函数?

----------------------------------------------------
public继承是一种“is-a”的关系,基类的protected和public成员都会被继承下来。




不过按输出结果来看 似乎B类既继承了// A类的f函数,同时它自己又定义一个f函数 请诸位指教
--------------------------------------------------------------------------------

派生类会掩盖掉基类中的同名函数,就是说你不显式指定,默认都会调用派生类的,这个应该和全局/局部对象同名时的处理差不多
paidfighting 2008-03-15
  • 打赏
  • 举报
回复
继承了,而且称为 覆盖。。
clhposs 2008-03-15
  • 打赏
  • 举报
回复
是的 继承了

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧