为了达到动态绑定的目的,C++编译器通过某个表格,在执行期“间接”调用实际上想要绑定的函数。这样的表格称为虚函数表。每个“内含虚函数的类”,编译器都会为它作出一个虚函数表,表中的每一个元素都指向一个虚函数的地址。此外,编译器淡然会为类加上一项成员变量,是一个指向该虚函数表的指针。
虚函数表的内容是依据类中的虚函数声明次序,一一填入虚函数指针。派生类会继承基类的虚函数表。虚函数表指针地址在对象空间的首位。
虚函数的缺点:增加了对象的开销。
优点:事先了动态绑定(后期绑定)。
为了达到动态绑定的目的,C++编译器通过某个表格,在执行期“间接”调用实际上想要绑定的函数。这样的表格称为虚函数表。每个“内含虚函数的类”,编译器都会为它作出一个虚函数表,表中的每一个元素都指向一个虚函数的地址。此外,编译器淡然会为类加上一项成员变量,是一个指向该虚函数表的指针。
虚函数表的内容是依据类中的虚函数声明次序,一一填入虚函数指针。派生类会继承基类的虚函数表。虚函数表指针地址在对象空间的首位。
虚函数的缺点:增加了对象的开销。
优点:事先了动态绑定(后期绑定)。