您当前的位置: 首页 >  c++

50 C++ - 如何实现动态绑定

杨林伟 发布时间:2019-10-09 10:13:52 ,浏览量:2

动态绑定什么时候发生?所有的工作都是由编译器在幕后完成。当我们告诉通过创建一个virtual函数来告诉编译器要进行动态绑定,那么编译器就会根据动态绑定机制来实现我们的要求, 不会再执行早绑定。

问题:C++的动态捆绑机制是怎么样的?

首先,我们看看编译器如何处理虚函数。当编译器发现我们的类中有虚函数的时候,编译器会创建一张虚函数表,把虚函数的函数入口地址放到虚函数表中,并且在类中秘密增加一个指针,这个指针就是vpointer(缩写vptr),这个指针是指向对象的虚函数表。在多态调用的时候,根据vptr指针,找到虚函数表来实现动态绑定。

验证对象中的虚指针:

class A{
public:
	virtual void func1(){}
	virtual void func2(){}
};

//B类为空,那么大小应该是1字节,实际情况是这样吗?
class B : public A{};

void test(){
	cout             
关注
打赏
1688896170
查看更多评论
0.0475s