静态类型和动态类型:
注:对于类的成员函数,只有虚函数是动态绑定,其他都是静态绑定。
C++
#include <iostream>
using namespace std;
class Base
{
public:
virtual void fun() { cout << "Base::fun()" << endl;
}
};
class Derive : public Base
{
public:
void fun() { cout << "Derive::fun()";
}
};
int main()
{
Base *p = new Derive(); // p 的静态类型是 Base*,动态类型是 Derive*
p->fun(); // fun 是虚函数,运行阶段进行动态绑定
return 0;
}
/*
运行结果:
Derive::fun()
*/
以下程序示例:
C++
#include <iostream>
using namespace std;
class A{
private:
int a1;
int a2;
public:
virtual void display(){ cout<<"A::display()"<<endl;}
virtual void clone(){ cout<<"A::clone()"<<endl;}
};
class B: public A{
private:
int b;
public:
virtual void display(){ cout<<"B::display()"<<endl;} override
virtual void init(){ cout<<"B::init()"<<endl;}
};
class C: public B{
private:
int c;
public:
virtual void display(){ cout<<"C::display()"<<endl;} override
virtual void execute(){ cout<<"C::execute()"<<endl;}
virtual void init(){cout<<"C::init()"<<endl;} override
};
int main() {
A *p1 = new B();
A *p2 = new C();
p1->display();
p2->display();
return 0;
}
我们对上述程序进行编译,并查看这里给出 A, B, C 三个类的虚函数表,如下图所示:
可以得出以下结论:
我们可以分以一下动态绑定的实现:
阅读量:381
点赞量:0
收藏量:0