基类成员函数调用的虚函数是本基类的,还是子类的?

classBaseA{disp(){check();};virtualvoidcheck(){};}classB:publicBaseA{check(){cout<<"B... class BaseA {
disp() { check();};
virtual void check() { };
}

class B: public BaseA {
check() { cout << "B :: check()"};
}

在BaseA中的disp()中调用check()时,调用的是基类还是子类的呢?为什么?
实在有点迷糊。。
这是为什么呢?想不通为什么调用的不是基类的。。
展开
 我来答
jingnina
推荐于2016-07-07
知道答主
回答量:3
采纳率:0%
帮助的人:0
展开全部
因为check()是虚函数所以BaseA的对象调用dish()时调用的是基类的check();而B类的对象调用dish()时调用的是子类(即B类自身)的check()
#include<iostream>
#include<string>
using namespace std;
class BaseA {
public:
void disp(){check();}
virtual void check() {cout<<"A::check()"<<endl; }
};

class B: public BaseA {
public:
void check() { cout << "B :: check()"<<endl;};
};

int main()
{
BaseA a;
B b;
a.disp();//A::check()
a.check();//A::check()
b.disp();//B::check()
b.check();//B::check()
return 0;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hhangle
2010-03-01 · 超过12用户采纳过TA的回答
知道答主
回答量:39
采纳率:33%
帮助的人:22.5万
展开全部
默认调用的时候是子类的,如果要调用基类的要使用BaseA:Check()的方式调用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式