【发布时间】:2021-07-07 22:48:11
【问题描述】:
我有一个class A 作为class B 的基类。
我在我的虚拟函数xyz()中调用了非虚拟函数abc(),如下所述。
由于运行时多态性,B:xyz 被调用——我明白这一点。
但是,我不明白,为什么后面是B:abc 而不是A:abc,因为abc 是一个非虚拟函数。
请注意:我遇到了以下问题:Virtual function calling a non-virtual function。它提到在虚函数中调用abc() 等效于this->abc(),因此是输出。但是,我不确定我是否理解这部分。
因为,当我做相反的事情(即调用虚函数的非虚函数)时,会显示正确的运行时多态性。那么 this 指针会发生什么?
//Virtual function calling non-virtual
class A
{
public:
void abc()
{
cout<<"A:abc"<<endl;
}
virtual void xyz()
{
cout<<"A:xyz"<<endl;
abc();
}
};
class B: public A
{
public:
void abc()
{
cout<<"B:abc"<<endl;
}
void xyz()
{
cout<<"B:xyz"<<endl;
abc();
}
};
int main() {
A *obj3 = new B;
obj3->xyz();\
return 0;
}
Output
B:xyz
B:abc
//Non-virtual calling virtual function
#include <iostream>
using namespace std;
class A
{
public:
void abc()
{
cout<<"A:abc"<<endl;
xyz();
}
virtual void xyz()
{
cout<<"A:xyz"<<endl;
}
};
class B: public A
{
public:
void abc()
{
cout<<"B:abc"<<endl;
xyz();
}
void xyz()
{
cout<<"B:xyz"<<endl;
}
};
int main() {
A *obj3 = new B;
obj3->abc();
return 0;
}
Output
A:abc
B:xyz
【问题讨论】:
-
请澄清一下但是我不明白,为什么后面跟着B:abc而不是A:abc,因为abc是非虚拟函数你是什么意思我的后跟 B:abc?据我所知,
B::abc从未被调用过。 -
@user4581301 检查第一个案例的输出
标签: c++ dynamic-binding run-time-polymorphism