类的普通函数(非虚函数),在内存中地址是唯一的,可以把他们想象成普通函数,只不过第一个参数是this指针,在通过类对象指针调用时,编译器会根据类型找到相应的非虚函数的地址,这个工作是编译期完成的
每个类都会维护一个虚表,编译时,编译器根据类的声明创建出虚表,对象被构造时,虚表的地址就会被写入到这个对象内存的起始位置。父类、子类的虚表是不同的,虚表里面的内容也是不一样的(虚表里面记录了要执行的函数的函数指针)。虚函数在执行是一个动态的过程,并不是在编译时就确定下来要执行哪一个函数,而是运行时从虚表查到真正要执行的函数的地址,然后再将this指针传入执行
虚函数使用时对应的编译原理
最新推荐文章于 2025-04-07 15:52:16 发布