C++多态总结
C++中主要就是对封装、继承、多态的理解;
- 封装:就是将数据和操作数据的方法包装成一个整体,对外提供这个整体的接口,不显示里面的数据及方法;函数、类都是封装;
目的:实现隐秘性,提供复用性,划分功能; - 继承:在原有类的基础上产生新的类,产生的类是子类或派生类,原有类是基类或父类,一般子类具有基类的特性,但也会加上自己的特性,比如基类有个“1”,派生出的子类也会有个“1”,但是这样1+1的东西没啥意思,所以在子类中还可以封装一些别的东西“2,3”什么的,这样再从范围的角度看封装的话,就可以把子类父类看成一个整体;public继承;protected继承;private继承三种继承方式;
目的:减少代码量,代码复用;实现多态; - 多态:相同的信息、方法等在不同的条件或环境下有不同的表现(我感觉就是字面意思,多种形态嘛);
一般包含四种:重载多态、强制多态、参数多态、包含多态
a.重载多态:函数重载和运算符重载;
a.1 函数重载:在同一个范围内(C++中类),函数名相同,参数个数不同或类型不同或两者都不同(参数不同);在这里又有对重写(覆盖)、重定义、隐藏的区分;重写:不同的范围,基类有virtual 关键字,子类中函数名相同,参数相同;重定义:不同的范围,基类无virtual 关键字,子类中函数名相同,参数相同;覆盖:不同的范围,函数名相同,参数不同,此时基类有无virtual关键字,基类同名函数都会被隐藏;
a.2 运算符重载:就是把原有的运算符功能重新定义成新的功能,比如在 ’ + '原只是对相同的数据类型进行加法运算,但是对其重载后可以实现对象成员之间的加法等新功能,实现了多态
b. 强制多态:强制类型转换
b.1 静态转换:static_cast:基本数据类型之间的转换;
b.2 动态转换:dynamic_cast: 子类指针转换后可以指向父类对象;
b.3 重新解释类型:reinterpret_cast:不同数据类型指针之间的转换;
b.4 去常属性:const_cast: 给加const修饰的指针、引用或变量等去掉const;”const修饰的全局变量不能被去const,做常量使用“;
c. 参数化多态 :主要是参数化模板:忽略数据的类型,抽象出业务逻辑变成一种表达方式就是模板;表现方式:当给出不同类型的数据,通过相同的结构拿到不同的结果;
d. 包含多态 :在一个类中包含另一个类的多态;主要是对虚函数的应用;
条件:1.满足类型兼容性原则(这里用到父类指针可以指向子类对象);
2.虚函数声明(函数名相同,参数列表相同)
3.通过指针、引用调用虚函数;
在c++语言里,封装、继承、多态其实从使用角度是没有严格的界限;
欢迎大家指出我概念性的问题,一起讨论!