#include <iostream>
using namespace std;
class B
{
public:
// virtual void func()
void func()
{
cout << "B func"<<endl;
}
};
class D:public B
{
public:
void func()
{
cout << "D func"<<endl;
}
};
int main(){
D d;
B *pb = &d;
D *pd = &d;
pb->func();
pd->func();
return 0;
}
如果B中的func是virtual的话,就会产生动态绑定,输出都是D func,但是去的B 中的virtual,那么pb->func,输出的就是B func,这怎么理解呢
这说明
pb
是一个B
类型的指针,它所指向的实际是一个D
类型的对象。对于非虚函数,
pb->func
会直接在指针类型,也就是B
里去找函数对于虚函数,
pb->func
会在实际类型D
中去找函数