3.多态性

Posted Mr_ox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.多态性相关的知识,希望对你有一定的参考价值。

1.概述:

  - 多态指同样的消息被不同类型的对象接收时导致不同的行为。

  - 多态的类型:重载多态、强制多态、包含多态、参数多态。

    * 重载多态:通过重载其参数列表实现

    * 强制多态:指将一个变元的类型加以变化,以符合一个函数或操作的要求。

    * 包含多态:类族中定义于不同类中的同名成员函数的多态行为,主要是通过虚函数来实现。

    * 参数多态:模板

  - 多态实现:编译时多态、运行时多态

2.运算符重载

  - 运算符重载规则:

    * 除少数几个外,全部可以重载,并且只能重载C++中已有的运算符(. * :: ?:)

    * 重载之后的运算符的优先级和结合性都不会改变

    * 运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来讲,重载的功能应当与原有功能相类似,不能改变原有运算符的操作对象个数,同时至少要有一个操作对象时自定义类型。

  - 重载语法:

    返回类型  operator  运算符(形参表){}

  - 运算符重载为成员函数

  - 运算符重载为非成员函数

3.虚函数:虚函数是动态绑定的基础,必须是非静态成员函数。经过派生之后,在类族中就可以实现运行过程中的多态。

  - 声明语法:virtual  函数类型  函数名(形参表)

  - 虚函数声明只能出现在类定义中的函数原型声明中,而不能在成员函数实现的时候

  - 运行中多态的3个条件:

    * 类之间满足赋值兼容规则

    * 声明虚函数

    * 由成员函数来调用或者通过指针、引用来访问虚函数

  - 虚析构函数:解决释放不同类的内存释放问题

4.纯虚函数与抽象类

  抽象类是为了抽象和设计的目的而建立。抽象类是带有纯虚函数的类,为了通过它多态的使用其中的成员函数。无法实例化一个抽象类的对象,只能通过继承机制,生成抽象类的非抽象派生类,然后再实例化。 

  - 纯虚函数与一般虚函数的原型在书写格式上的不同就在于后面加了“=0”,基类中可以不再给出函数的实现部分。

  - C++的类类型分为两类,多态类型和非多态类型。多态类型指有虚函数的类,非多态指其他。

  - 虚函数:通过虚表实现

  - 重载是方法名相同,参数列表不同;重写是函数声明部分相同,不一样的实现部分,必须要通过继承。

5.参数化多态:将程序所处理的对象的类型参数化,使得一段程序可以用于处理多种不同类型的对象

  - 函数模板:template

  - 类模板:使用类模板使用户可以为类定义一种模式,使得类中的某些数据成员,某些成员函数的参数,返回值或局部变量能取任意类型

以上是关于3.多态性的主要内容,如果未能解决你的问题,请参考以下文章

设计模式面向对象 - 多态 ( 面向对象 3 要素 | 多态 提升 程序扩展性 | 多态示例 )

具有多态性的2-3树的设计与实现

协议缓冲区中的多态性 3

17. 动态多态性

多态性

3.多态