20190711总复习5

多态,虚函数
多态:虚函数的作用主要是实现了多态的机制,关于多态简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。泛型技术:利用不变的代码来实现可变的算法。

虚函数表:主要解决了继承覆盖的问题,保证其内容真实反应实际函数。

单继承:
覆盖与无覆盖:
无覆盖时,虚函数按照声明顺序放于表中。
父类的虚函数在子类的虚函数前面

有覆盖:
覆盖的函数被放到了虚表中原来父类虚函数
没有被覆盖的函数依旧

多重继承:
无覆盖:
每个父类都有自己的虚表
子类的成员函数被放到了第一个父类的表中

有覆盖:
会把多个基类函数全部覆盖

安全性:
不能通过父类的指针访问子类自己的虚函数。
父类中必须包涵此函数,否则不合法。

编译器必须要保证虚函数表的指针存在于对象实例中最前面的位置。
为了能正确的取到虚函数的偏移量。

父类指针指向子类对象,或者引用子类对象时,第一接口为父类,先观察父类函数,如果函数为虚,看子类有没有重写的,如果有则调用子类函数,如果父类没有函数,则编译出错。
父类对象只能调用父类函数,子类对象存在隐藏覆盖这一说法
当虚函数存在0时,虚指针出错。

动态开辟空间时:析构方法加一个虚,能够连带着调动子类析构

多态主要是有一个(仅有一个)虚表,当父类对象指针指向子类对象,或者引用子类对象的引用时,会首先调用父类函数,当父类函数是虚函数时,再观察子类函数有没有重写函数(覆盖),有的话调用子类的函数,否则调用父类函数。

静态变量需要在类外依次初始化

编译不通过,因为在类里面,会用到友元声明类,所以需要提前声明

发布了39 篇原创文章 · 获赞 10 · 访问量 772

猜你喜欢

转载自blog.csdn.net/weixin_43393776/article/details/95482568