1、什么是绑定?
绑定就是将函数调用与地址关联起来. 只有virtual的函数是动态绑定,其它都是前期绑定。
动态绑定也称为:多态,即用不同类型的指针访问一个对象的虚函数时,体现出不同的行为。
class Base
{
public:
int x;
public:
Base()
{
x = 100;
}
void Function_1()
{
printf("Base:Function_1...\n");
}
virtual void Function_2()
{
printf("Base:Function_2...virtual\n");
}
};
class Sub:public Base
{
public:
int x;
public:
Sub()
{
x = 200;
}
void Function_1()
{
printf("Sub:Function_1...\n");
}
virtual void Function_2()
{
printf("Sub:Function_2...virtual\n");
}
};
void TestBound(Base* pb)//pb 为Base* 也就是基类指针
{
int n = pb->x;
printf("%x\n",n);
pb->Function_1(); //函数调用
pb->Function_2();
}
int main(int argc, char* argv[])
{
Base base;
TestBound(&base);//传父类对象过去,但在编译时已经确定,属于编译期绑定或前期绑定
Sub sub;
TestBound(&sub);//传子类对象过去,用基类指针访问这个子类对象时,因为存在虚函数,已经是子类虚函数,属于动态绑定或运行期绑定
return 0;
}
动态绑定、多态
最新推荐文章于 2025-03-04 23:22:06 发布