#include<iostream>
using namespace std;
class A
{
public:
void foo()
{
printf("1\n");
}
virtual void fun()
{
printf("2\n");
}
};
class B : public A
{
public:
void foo()
{
printf("3\n");
}
void fun()
{
printf("4\n");
}
};
int main(void)
{
A a;
B b;
A *p = &a;
p->foo(); //1 不是虚函数,静态绑定,根据指针类型,编译期决定调用的函数
p->fun(); //2 是虚调用,迟绑定,调用基类的func()
p = &b;
p->foo(); //1 不是虚函数,静态绑定,根据指针类型,编译期决定调用的函数
p->fun(); // 4 是虚调用 迟绑定,调用子类的fun()
B* ptr = (B*)&a;
ptr->foo(); // 3 不是虚函数,静态绑定,根据指针类型,编译期决定调用的函数
ptr->fun(); // 2 虚函数迟绑定,调用基类的fun()
return 0;
}
时间: 2024-11-11 08:53:46