c++——理解虚函数和多态

1. 多态分为静态多态和动态多态。

静态多态:主要是重载,在编译时确定;

动态多态:通过虚函数的机制实现;

2. 虚函数的实现

在有虚函数的类中,类的最开始的部分是一个虚函数表的指针,这个指针指向一个虚函数表,表中放了虚函数的地址,实际的虚函数在代码段(.text)中。当子类继承了父类时也会继承该虚函数表,当子类重写父类中的虚函数时,会将其继承到的虚函数表中的地址替换为重新写的函数地址。

使用虚函数,会增加访问内存的开销,降低效率。

3. 重写和重载的区别

1)范围不同。被重写的和重写的函数在两个类中,而重载和被重载的函数在同一个类中。

2)参数区别。被重写函数和重写函数的参数列表一定相同,而被重载函数和重载函数的参数列表一 定不同

3)virtual的区别。重写的基类中被重写的函数必须要有virtual 修饰,而重载函数和被重载函数可以被 virtual 修饰,也可以没有

重写是动态绑定的多态,重载是静态绑定的多态。

扫描二维码关注公众号,回复: 12839852 查看本文章

4. 隐藏

1)和重写一样,隐藏函数和被隐藏函数不在同一个类中。

2)隐藏函数和被隐藏的函数的参数列表可以相同,也可不同,但是函数名肯定要相同。 当参数不相同时,无论基类中的参数是否被virtual 修饰,基类的函数都是被隐藏,而不是被重写。

猜你喜欢

转载自blog.csdn.net/www_dong/article/details/113839893