1. 多态分为静态多态和动态多态。
静态多态:主要是重载,在编译时确定;
动态多态:通过虚函数的机制实现;
2. 虚函数的实现
在有虚函数的类中,类的最开始的部分是一个虚函数表的指针,这个指针指向一个虚函数表,表中放了虚函数的地址,实际的虚函数在代码段(.text)中。当子类继承了父类时也会继承该虚函数表,当子类重写父类中的虚函数时,会将其继承到的虚函数表中的地址替换为重新写的函数地址。
使用虚函数,会增加访问内存的开销,降低效率。
3. 重写和重载的区别
1)范围不同。被重写的和重写的函数在两个类中,而重载和被重载的函数在同一个类中。
2)参数区别。被重写函数和重写函数的参数列表一定相同,而被重载函数和重载函数的参数列表一 定不同。
3)virtual的区别。重写的基类中被重写的函数必须要有virtual 修饰,而重载函数和被重载函数可以被 virtual 修饰,也可以没有。
重写是动态绑定的多态,重载是静态绑定的多态。
扫描二维码关注公众号,回复:
12839852 查看本文章
4. 隐藏
1)和重写一样,隐藏函数和被隐藏函数不在同一个类中。
2)隐藏函数和被隐藏的函数的参数列表可以相同,也可不同,但是函数名肯定要相同。 当参数不相同时,无论基类中的参数是否被virtual 修饰,基类的函数都是被隐藏,而不是被重写。