码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++ 多态(2)


    C++ 多态(2)

      • 一、覆盖(重写)、重载、隐藏
        • 1.成员函数覆盖(override ,也称重写)特点:
          • ①不同的作用域(分别位于派生类与基类);
          • ②函数名相同;
          • ③参数相同;
          • ④返回值相同;
          • ⑤基类必须有virtual 关键字,不能有static;
          • ⑥重写函数的权限访问限定符可以不同;
        • 2.成员函数隐藏 特点:
          • ①基类与派生类有同名函数,调用的时候总是调用子类的函数,此时父类成员函数被隐藏;
          • ②不在同一作用域(分别位于派生类与基类);
          • ③函数名相同;
          • ④返回值可相同可不同;
          • ⑤参数不同时,不论有无virtual关键字,基类函数将被隐藏(注意与重载的区别);
          • ⑥参数相同时,但基类没有virtual关键字,基类的函数被隐藏(注意与覆盖的区别);
        • 3.函数重载(overload)特点:
          • ①同一片作用域内;
          • ②函数名相同;
          • ③返回值可以相同可以不相同;
          • ④参数列表不同;
        • 4.重写与隐藏的区别:
          • ①对于子类对象来说,子类对象在调用的时候,总是调用子类实现的成员函数;
          • ②对于父类对象,重写:用父类的指针或引用指向子类对象的时候,覆盖的情况下,父类指针或引用调用的函数是子类实现的函数;
          • 隐藏:用父类的指针或引用指向子类对象的时候,隐藏的情况下,父类指针或引用调用的函数是父类实现的函数;
      • 二、多态原理与虚函数表
        • 1.虚函数表:实际上对于定义了虚函数的类来说,有一个隐藏的虚函数表指针,指向一个虚函数表,这个虚函数表中存放着虚函数的地址;
        • 2.多态原理:由于动态绑定,因此当父类的指针或者引用去调用虚函数时,会到运行时具体的对象的虚函数表中进行寻找对应的虚函数进行调用,若为父类类型,则调用父类虚函数,若为派生类类型,则调用派生类虚函数;
      • 三、抽象类与纯虚函数
        • 1.什么叫抽象类?
          • 含纯虚函数的类称为抽象类。
        • 2.什么叫纯虚函数?
          • 指定函数接口规范,而不做具体的实现,实现部分由继承它的子类去实现。(只定义,不实现)
        • 3.抽象类的特点与作用
          • ①抽象类中只声明函数接口,不能有具体的实现;
          • ②抽象类不能创建对象,可以定义指针与引用;
          • ③派生类继承基类,并且必须要实现基类中的所有纯虚函数,否则派生类也是抽象类;
        • 4.应用场景
          • ①某些情况下父类只知道其子类应该包含怎样的方法,但无法准确知道子类如何实现这些方法。此时我们会在父类中只声明相应的方法,而不去具体实现,让子类根据自己实际情况去实现相应的方法。
          • ②从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,避免子类设计随意性;

    一、覆盖(重写)、重载、隐藏

    1.成员函数覆盖(override ,也称重写)特点:

    ①不同的作用域(分别位于派生类与基类);
    ②函数名相同;
    ③参数相同;
    ④返回值相同;
    ⑤基类必须有virtual 关键字,不能有static;
    ⑥重写函数的权限访问限定符可以不同;

    2.成员函数隐藏 特点:

    ①基类与派生类有同名函数,调用的时候总是调用子类的函数,此时父类成员函数被隐藏;
    ②不在同一作用域(分别位于派生类与基类);
    ③函数名相同;
    ④返回值可相同可不同;
    ⑤参数不同时,不论有无virtual关键字,基类函数将被隐藏(注意与重载的区别);
    ⑥参数相同时,但基类没有virtual关键字,基类的函数被隐藏(注意与覆盖的区别);

    3.函数重载(overload)特点:

    ①同一片作用域内;
    ②函数名相同;
    ③返回值可以相同可以不相同;
    ④参数列表不同;

    4.重写与隐藏的区别:

    ①对于子类对象来说,子类对象在调用的时候,总是调用子类实现的成员函数;
    ②对于父类对象,重写:用父类的指针或引用指向子类对象的时候,覆盖的情况下,父类指针或引用调用的函数是子类实现的函数;
    隐藏:用父类的指针或引用指向子类对象的时候,隐藏的情况下,父类指针或引用调用的函数是父类实现的函数;

    二、多态原理与虚函数表

    1.虚函数表:实际上对于定义了虚函数的类来说,有一个隐藏的虚函数表指针,指向一个虚函数表,这个虚函数表中存放着虚函数的地址;

    2.多态原理:由于动态绑定,因此当父类的指针或者引用去调用虚函数时,会到运行时具体的对象的虚函数表中进行寻找对应的虚函数进行调用,若为父类类型,则调用父类虚函数,若为派生类类型,则调用派生类虚函数;

    三、抽象类与纯虚函数

    1.什么叫抽象类?

    含纯虚函数的类称为抽象类。

    2.什么叫纯虚函数?

    指定函数接口规范,而不做具体的实现,实现部分由继承它的子类去实现。(只定义,不实现)

    3.抽象类的特点与作用

    ①抽象类中只声明函数接口,不能有具体的实现;
    ②抽象类不能创建对象,可以定义指针与引用;
    ③派生类继承基类,并且必须要实现基类中的所有纯虚函数,否则派生类也是抽象类;

    4.应用场景

    ①某些情况下父类只知道其子类应该包含怎样的方法,但无法准确知道子类如何实现这些方法。此时我们会在父类中只声明相应的方法,而不去具体实现,让子类根据自己实际情况去实现相应的方法。
    ②从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,避免子类设计随意性;
  • 相关阅读:
    使用QT操作Excel 表格的常用方法
    Js与Jq实战:第十讲:jQuery制作动画
    Python虚拟环境指南2022版本
    AI大预言模型——ChatGPT在地学、GIS、气象、农业、生态、环境应用
    图像鲁棒性--常见14种图像攻击matlab实现
    P9232 [蓝桥杯 2023 省 A] 更小的数(区间DP)
    C++STL——string类
    一、软件工程概述+练习题
    第2-2-3章 常见组件与中台化-常用组件服务介绍-注册登录服务
    Ubuntu 使用 nginx 搭建 https 文件服务器
  • 原文地址:https://blog.csdn.net/jun8086/article/details/127621069
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号