zoukankan      html  css  js  c++  java
  • 第十二章 多态性与抽象类

    第十二章 多态与虚函数

    一、多态的概念

    向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为

    具有不同功能的函数名可以用同一个函数名,以实现用一个函数名调用不同内容的函数

    *静态多态和动态多态(编译时的多态性和运行时的多态性)

    静态多态的特点:调用速率快、效率高,但缺少灵活性,在程序运行前就已经决定了执行的函数和方法

    动态多态的特点:不在编译时确定调用的是哪个函数,只有在程序运行时才动态确定操作所针对的对象。动态多态是通过虚函数实现的。

    二、利用虚函数实现动态多态性

      *虚函数的作用

    函数重载处理的是同一层次上的同名函数问题,而虚函数处理的是不同派生层次的同名函数问题,前者是横向重载,后者可以理解成是纵向重载。(不同点:同一类族虚函数首部是相同的,而函数重载时的函数是不同的(这里指函数参数个数或类型不同))

     

    *静态关联与动态关联(早期关联与滞后关联)

     

    *虚函数声明

    1.只能用virtual声明类的成员函数,把它作为虚函数

    2.一个成员函数配声明为虚函数后,在同一类族就不能再定义一个非virtual 且函数首部相同的函数

    3.考虑事项:

    (1)如果成员函数在类的继承后出现功能的更改一般声明为虚函数

    (2)如果通过基类指针或者引用去访问,则应当声明为虚函数

    (3)有时会定义空函数体的虚函数,留给派生类添加

     

    *虚析构函数

    当基类有非虚析构函数时,只执行基类的析构函数,不执行派生类的析构函数。如果希望能执行派生类的析构函数,可以讲基类的析构函数声明为虚构函数,此时,该基类所有的派生类的析构函数都自动成为虚函数,即使派生类与基类的析构函数名不同。

    注:构造函数不能声明为虚函数

     

    三、纯虚函数与抽象类

    1.纯虚函数概念

    对于基类的虚函数不作任何处理的情况的一种简化形式

    virtual 函数类型 函数名(参数表)= 0

    注意:纯虚函数没有函数体;最后的=0不表示函数返回值为0,只起形式作用;

    2.抽象类

    含有纯虚函数的类就是抽象类

    只用来派生,不用来生成定义对象

    四、结论

    1.某基类包含一个或多个纯虚函数,就是抽象类

    2.抽象类一般不是现实存在的对象的抽象

    3.在类的层次结构中,顶层或最上面几层都可以是抽象类

    4.抽象基类是本类族的共用接口,或者说是从同一基类派生出的多个类有同一接口,因此,能响应同一形式的消息。

    5.如果基类声明了虚函数,则在派生类中出现首部相同的函数均为虚函数(默认)

    6.使用虚函数提高了程序的可扩展性。

     

    个人笔记,仅供参考,欢迎指教!

    未经允许,请勿转载!

    个人分享,欢迎指导,未经允许,请勿转载。谢谢!
  • 相关阅读:
    这篇文章把短线操作技巧以及交易原则讲透了!
    炒股老手的妙招——卖出在周K线的顶部
    连续多阳低吸买入法需要哪些条件?
    2个实盘案例带你了解南玻量态选庄股法!
    如何通过筹码分布判断一个股票要不要做?
    股票指标公式高手是怎么通过指标变现的?
    股票回踩均线是什么意思?
    定宽不定宽盒子的居中解决办法和外边距塌陷问题
    JS 数据类型
    JS 事件总结
  • 原文地址:https://www.cnblogs.com/hello-OK/p/7002551.html
Copyright © 2011-2022 走看看