多态性 与 静态绑定

#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;
}

posted @ 2015-07-17 09:54  niupan369  阅读(186)  评论(0编辑  收藏  举报