定义虚函数后,虚表地址存放于类的前4个字节,故无论多少个虚函数,只占用类的4个字节,虚表中则存放多个虚函数,类似于数组一样排列。
虚函数与多态
在编译器编译后,成员变量以及普通成员将会分配固定地址,称为前期绑定;
而虚函数则不是,它需要程序运行时,动态分配地址,称为动态绑定。
如果想通过父类指针访问子类的方法,那么便是多态,通过多重继承虚函数,其各类的虚函数保存在子类的虚表中
一些见解:
1.使用父类指针访问子类时,只能访问子类中继承父类的成员
2.如果子类的成员函数与父类相同,那么子类的函数将会覆盖继承的父类函数
3.通过继承的相同的虚函数,可以通过父类指针访问,而这些相同的虚函数则存储于虚表当中,通过一定的顺序调用继承过来的虚函数。
4.通过普通指针访问类时,则通过指针移位进行访问变量,如果类中有虚函数,那么指针的第一个指向为虚函数的虚表地址,指针的下一个才是变量值
5.子类的成员变量可以通过父类指针访问,但只能访问父类拥有的成员
6.子类的成员变量可以通过普通的指针访问,通过指针的递增访问所有变量
7.子类的成员函数能通过父类指针访问,但仅限于虚函数,通过虚表
8.子类的成员函数可以通过定义函数指针进行访问