C++核心编程-----多态----

1:为什么使用多态?

为了避免调用函数的时候的冲突
比如子类被赋值给父类 子类中与父类同名的方法会被替换父类中方法
C++核心编程-----多态----_第1张图片
C++核心编程-----多态----_第2张图片
被赋值时被替换
C++核心编程-----多态----_第3张图片
加上virtual则不会

C++核心编程-----多态----_第4张图片
C++核心编程-----多态----_第5张图片
总结:为了避免因为函数名重复而导致 在子类给父类赋值时引发的错误(子类中相同的方法被顶替)

2:多态的本质-虚函数

目的是使用父类指针做一般性处理 执行时指针可能指向子类对象
形式上原本在调用父类的中的方法,实际可能会调用子类中的相同方法
使用方法: 在相应的父类头文件的函数前面加上virtual即可 在函数实现的里面不需要加

3:虚函数的原理-虚函数表

当一个类存在虚函数的时候 虚函数不占用类的内存空间
只有第一个虚函数的指针占用内存空间,其他虚函数都可以通过这个指针来访问.
指针指向的表 称为虚函数表

如果子类的虚函数表直接继承父类
C++核心编程-----多态----_第6张图片

如果重写了某个方法则直接替换
如果新加了虚函数则加在虚函数后面
如果继承多个父类 则继承的表是分开的 如图
C++核心编程-----多态----_第7张图片

纯虚函数与抽象类
1. 什么是纯虚函数和抽象类?

在自己的类里只定义接口 不做具体实现的叫做纯虚函数
写法

virtual int func()=0;

包含这种接口的类叫做抽象类
2. 注意事项!

父类声明某纯虚函数后,
那么它的子类,
1)要么实现这个纯虚函数 (最常见)
2)要么继续把这个纯虚函数声明为纯虚函数,这个子类也成为抽象类
3)要么不对这个纯虚函数做任何处理,等效于上一种情况(该方式不推荐)

你可能感兴趣的:(c++查漏补缺,c++,开发语言)