我有一个class A
作为基类的class B
.
我在我的虚拟函数中调用了非虚拟函数 ,如下所述。abc()
xyz()
由于运行时多态性,B:xyz
被称为——我明白这一点。
但是,我不明白,为什么后面跟着B:abc
and not A:abc
,因为abc
它是一个非虚拟函数。
请注意:我遇到了以下问题:Virtual function calls 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