首页文章正文

调用虚函数,虚函数是没有实现的函数

虚函数调用机制 2023-11-22 15:38 627 墨鱼
虚函数调用机制

调用虚函数,虚函数是没有实现的函数

大家已经说了为什么最好不要(注意不是不能)在析构函数中调用虚函数。我解释下一旦派生类析构函数代码pb->func1();由于func1()不是虚函数,因此执行的是静态绑定,pb的编译期类型是Base,此时执行的是Base类的func1()函数。在Base类的func1()函数中,调用了虚函

pa->fuu();//此函数的调用顺序为A中的fuu 由于其不是虚函数所以输出2 pb->foo();//此“函数会遵循父类”的调用规则调用子类中的重写函数“无论其是不是虚虚表指针是在类的构造函数中初始化的,相应的代码由编译器自动生成。在生成调用虚函数的代码的时候,并没有直接把虚函数地址写死,而是通过虚表进行调用,多了一

在重复一遍虚函数实现的过程:通过对象内存中的vptr找到虚函数表vtbl,接着通过vtbl找到对应虚函数的实现区域并进行调用。如开头例子中,当调用vir_func函数时,分别通过Base、a、b指针我们把派生类的虚函数定义为私有,再进行上面的调用,就会出现注释中的情况。因为message()是car类的私有成员,所以在类外应该访问不到它,正像“mycar.message();”会出现编译

虚函数的处理:被调用的函数不仅依据调用的特定函数,还依据调用的对象的种类。通常是由虚函数表(vtable)来实现的。虚函数表的结构:它是一个函数指针表,每一个因为普通函数是静态联编的,而调用虚函数是动态联编的。联编的作用:程序调用函数,编译器决定使用哪个可执行代码块。所谓联编就是将函数名和函数体的程序连接到

后台-插件-广告管理-内容页尾部广告(手机)

标签: 虚函数是没有实现的函数

发表评论

评论列表

51加速器 Copyright @ 2011-2022 All Rights Reserved. 版权所有 备案号:京ICP1234567-2号