C 为什么每个对象都有一个虚函数指针?
首先明确两个概念。
① 虚函数地址存放在虚函数表。多态需要通过虚函数和虚函数表实现。
② 类的对象内部,会有指向类内部的虚表地址指针,这个指针的作用就是调用虚函数。而虚函数的调用,会被编译器转换为对虚函数表的访问。
由此可见。每个有虚函数的类,都会自己的虚函数表,因此每个包含虚函数的类对象,就会有对应的虚函数表指针。
值得一提的是,①在计算类对象的内存大小时,需要计算有虚函数指针的数量。②对于多重继承,如果多个基类都存在虚函数,则继承类中就会包含与之对应的,多个基类虚函数表。此时,子类虚函数地址,需要放在声明的第一个基类虚函数表后面。
赞 (0)
