- C++多态性
- 一个接口,多种方法
- 不同继承关系的类对象,去调用同一函数,产生的不同的行为
- 继承中构成的条件
- 调用函数的对象必须是指针或者引用
- 被调用的函数必须是虚函数,且完成了虚函数的重写
- 虚函数的重写(覆盖)
- 派生类中有一个跟基类完全相同的虚函数
- 不同作用域(分别在基类和派生类)
- 函数名、参数、返回值都相同
- 基类函数必须有virtual关键字
- 虚函数的重写(覆盖)
- 静态多态
- 编译器在编译期间完成多态的构建
- 实现方式
- 函数重载:包括普通函数的重载和成员函数的重载
- 允许多个函数使用相同的名字,但是参数不同
- 在同一个作用域
- 返回值可以不同
- 函数模板的使用
- 函数重载:包括普通函数的重载和成员函数的重载
- 虚函数
- 允许基类的指针来调用子类的这个函数
- 纯虚函数
- 在基类中声明的虚函数,在基类中没有定义
- 要求派生类要自己定义其实现方法
- 动态多态
- 运行时的多态,在程序执行期间判断所引用对象的实际类型,根据其实际类型调用相应的方法
- 静态绑定(前期绑定):在程序编译期间确定了程序的行为
- 动态绑定(后期绑定):在程序运行期间,根据类型确定程序的具体行为,调用具体的函数
- 基类和派生类指针的相互赋值和转换
- 在公有派生的情况下,派生类的指针可以直接赋值给基类指针
- 即便基类指针指向的是一个派生类的对象,也不能通过基类指针访问基类没有而派生类中有的成员
- 基类的指针不能赋值给派生类的指针,但是通过强制类型转换,也可以将基类指针强制转换成派生类指针后再赋值给派生类指针。
- C++类型转换
-
const_cast
去掉类型的const或volatile属性
static_cast
无条件转换,静态类型转换
dynamic_cast
有条件转换,动态类型转换,运行时检查类型安全(转换失败返回NULL)
reinterpret_cast
仅重新解释类型,但没有进行二进制的转换
-
- 操作符重载:
- 同一个运算符,对不同类型的操作数,所发生的行为不同
- 操作符的重载就是函数的重载,在程序编译时把指定的运算表达式转换成对运算符的调用,把运算的操作数转换成运算符函数的参数,根据实参的类型决定调用哪个操作符函数
- C++模板
- 模板使程序员能够快速建立具有类型安全的类库集合和函数集合,它的实现,方便了大规模的软件开发
- 函数模板
- 类模板