c++继承多态知识感悟

2023-05-16

*组合与继承

    

          先说说组合,当设计一个新的类的时候,可以将一个已有类的对象作为成员,然后通过成员对象实现已有类的功能,类的对象成员与内置类型数据成员的声明语法一样。我们很早就开始接触并使用了。

        再说说继承:

        c++一共有着三大特性,封装继承和多态,所以足以体现出继承的重要。我感觉继承就是是为了实现代码的复用,如果派生类继承了基类那么就会继承基类所有的数据成员及成员函数,在公有继承的情况下,每个派生类的对象也是基类类对象。

         继承又分为单继承、多继承等方式。但是正是因为继承太有用、太容易用、很容易实现代码的复用性因此我们需要选择性的继承。如果A类和B类毫无关系,我们不应该为了让B类多一个功能而去让B继承A。如果在逻辑上B是A的一种,打个比方说B类的man也是A类的 Hunman的一种我们就可以让B类去继承A类。

         继承有公有继承public,私有继承private,以及保护继承protected三种(我也不知道是不是该读保护继承)在公有派生类中,基类的public成员和protected成员被继承,分别作为派生类的public 成员和protected 成员。基类的private成员虽然也被继承了,但在派生类中是不可见的。

        在私有派生类中,基类的public成员和protected成员被派生类作为自己的private成员继承下来。基类的private 成员虽然也被继承了,但在派生类中是不可见的。

        继承时也可以使用protected限定符,这时基类的public成员和protected成员都被派生类作为自己的protected成员继承下来。基类的private成员在protected派生类中仍是不可见的。

 

 

*c++多态性

 

一、什么是多态?

 

①通过继承同一个基类,产生了相关的不同的派生类,与基类中同名的成员函数在不同的派生类中会有不同的实现,也就是说:一个接口、多种方法。就像重载运算符,也是一种多态的提现吧。

②多态是c++面向对象的重要内容之一,它是一种行为的封装,是同一个事物所表现出来的多种形态,就是一个接口,多种形态。

     

多态分为两种:

一种是静态多态,是指编译时候的多态,通过函数重载或者运算符重载实现。

一种是动态多态,是指运行时候的多态,通过虚函数与基类指针共同作用实现。

 

二:如何实现多态?

 

        在C++中,基类指针是用来指向基类对象的,如果用它来指向派生类对象,则进行指针类型转换,将派生类指针转换为基类指针,所以该指针将会指向派生类对象中的基类部分,通过该指针是无法调用派生类对象中的成员函数的。

        但是,虚函数突破了这一限制。在派生类的基类部分中,派生类的虚函数取代了基类原来的同名虚函数,因此在使基类指针指向派生类对象后,使用该基类指针调用这个同名虚函数成员时就调用了派生类的虚函数。

        当把基类的某个成员函数声明为虚函数时,C++允许在其派生类中对该虚函数进行重新定义,赋予它新的功能,并且可以通过基类指针指向同一类族的不同派生类的对象,来调用相应派生类中的该同名虚函数。

        由虚函数实现的动态多态性就是:同一类族中不同的派生类对象,对同一函数调用作出不同的响应。

 

虚函数的使用方法如下:

 

在基类中使用virtual关键字声明成员函数为虚函数(这样就可以在派生类中对该虚函数进行重新定义,赋予它新的功能)。在派生类中重新定义此虚函数,要求函数名、形参列表、返回值类型均要与基类中的虚函数相同,并根据具体需要重新定义它的函数体。

        C++规定,当一个成员函数被定义为虚函数后,其派生类中的同名函数都自动成为虚函数(而不一定要有关键字virtual显示声明了),如果要是为了清晰,可以在每一层都加上virtual关键字。

         纯虚函数:有时,在定义一个虚函数时,并不定义其函数体,即它的函数体是空的,它的作用只是保留一个虚函数名,它关注的是接口的统一性,其具体的功能实现由它的派生类完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++继承多态知识感悟 的相关文章

  • 【操作系统】进程切换到底是怎么个过程?

    首先 xff0c 我们要了解 xff0c 进程切换是个什么过程 xff1f 进程切换概念 其实很简单 xff0c 进程切换就是从正在运行的进程中 xff0c 收回CPU的使用权利 xff0c 交给下一个要运行的进程 实际上 xff0c 因为
  • docker设置多个环境变量

    在命令行直接使用 e或 env xff0c env file xff0c 每个变量写一次 e 2 在dockerfile里设置 这里键值是以空格分开的
  • 一些好用的c++ STL库函数

    stl可以说是懒癌患者福利了 持续更新 xff08 随缘更新 xff09 全排列函数next permutation 今天在洛谷做题的时候发现一个题简直是这个函数的完美应用 题目链接 xff1a 洛谷P1088 火星人 头文件 xff1a
  • 【FreeRTOS】中断机制

    FreeRTOS 之中断机制 在FreeRTOS中 xff0c 中断是实现实时性必要的操作 一款芯片的中断涉及到硬件触发 xff0c 软件触发 xff0c 软件中断处理 所以FreeRTOS的中断机制其实不好单独拿出来看 FreeRTOS关
  • 【VSPD虚拟串口】【Modbus Poll】【Modbus Slave】仿真工具的学习过程

    学习想法 xff1a 通信是工控行业内采集仪器仪表等设备信息的重要途径 xff0c 同时可以通过通信访问设备的工作状况对设备进行监控 xff0c 也可以通过通信对设备进行参数修改以及控制设备运行 xff0c 所以掌握通信是工控行业人员比不可
  • 【RISC-V】Trap和Exception

    文章目录 控制流 xff08 Control Flow xff09 和TrapRISC V Trap处理中涉及的寄存器mtvec Machine Trap Vector Base Address mepc Machine Exception
  • @TableId(type = IdType.AUTO)不生效问题

    随手记录一下 64 TableId type 61 IdType AUTO private Long id Cause java sql SQLException Field 39 id 39 doesn 39 t have a defau
  • Docker apt-get update报错

    在Docker改apt源出现问题 root 64 1ad3e492d821 etc apt apt get update Ign 1 http mirrors 163 com debian stretch InReleaseGet 2 ht
  • c语言 面试前必备基础知识

    目录 c语言 数据类型c语言 数据类型打印格式 c s d f lf p x o lu lldc语言 格式化输出 md 0md m nf c语言 常用字符的ASCII值c语言 变量 常量c语言 变量c语言 变量命名规范c语言 变量存储类型
  • **make[2]: *** [CMakeFiles/offb_node.dir/build.make:84:报错解决

    make报错很有可能是因为CmakeList里面的文件没有修改好 xff01 如果是cpp文件的话需要修改下面两部分 xff1a 1 修改的第一处 xff1a 把节点修改成自己文件的节点就可以 2 修改的第二处 xff1a
  • Ubuntu18.04下ROS+Gazebo+Mavros+PX4安装教程(最新!最全!)

    一 依赖安装 span class token function sudo span span class token function apt span span class token function install span nin
  • 在Gazebo仿真中修改仿真环境 (World)

    这一步是要把初始环境改成白色地板环境 xff0c 跑仿真或者基于地标降落的时候更容易观察 xff0c 让人看着也比较舒服 这一步只需要修改下面代码 原代码 xff1a xff08 初始环境 xff09 span class token op
  • 关于Arduino、树莓派和 Pixhawk微处理器对比分析

    摘要 xff1a Arduino是一款基于微控制器 xff08 单片机 xff09 的电子开发板 xff0c 它可以运行一些相对比较简单的应用程序 包含硬件 xff08 各种型号的Arduino板 xff09 和软件 xff08 Ardui
  • 关于STARMAC旋翼机的计算系统组成分析

    摘要 xff1a STARMAC xff0c 全称为 the Stanford Testbed of Autonomous Rotorcraft for Multi Agent Control xff0c 是斯坦福大学为为了突破先前飞行器笨
  • 读史铁生随笔摘要

    人可以走向天堂 xff0c 不可以走到天堂 物质的天堂注定难为 xff0c 而精神的天堂恰于走向中成立 永远的限制是其永远成立的依据 无所眺望或有所眺望都证明到达之地并非圆满 xff0c 而你若永远地走向它 xff0c 你便随时都在它的光照
  • IMAX B6电路原理详解

    IMAX B6电路原理详解 本文出自 手电大家谈 xff0c 原帖 xff1a http www shoudian org thread 447417 1 1 html
  • arduino实验第三代码

    include lt avr eeprom h gt define PinA 2 中断0 define led1 1 define led2 3 define led3 4 define led4 5 define da 6 define
  • pytorch总结——1:初步introduction

    pytorch简介 先说Torch xff0c 这是一个与Numpy类似的张量 xff08 Tensor xff09 操作库 xff0c 与Numpy不同的是Torch对GPU支持的很好 xff0c Lua是Torch的上层包装 但是Lua
  • pytorch_RNN相关函数介绍

    1 RNN背景介绍 RNN结构 参数介绍 input size 输入x的特征数量 hiddien size 隐藏层的特征数量 num layers RNN的层数 nonlinearity 指定激活函数是tanh还是relu xff0c 默认
  • 一些tensorflow-VIN 的笔记

    1tensorflow 使用flags定义命令行参数 2 product的执行 3 xff0c round函数 保留小数点后几位 96 a 61 1 12345 result 61 round a 2 print result 1 12 4

随机推荐

  • rosbag录制固定话题,多话题等

    ROS框架下可以很方便的进行数据记录 并且将其转换为txt文件进行matlab处理 下面介绍一下rosbag的日常使用方法 1 查找你所需要的话题 xff1a rostopic list 在ros节点开启的情况下 span class to
  • 相机与IMU标定教程

    标定教程 way 相机与IMU联合标定 1 imu utils 标定IMU的内参 1 imu utils标定IMU的内参 xff0c 可以校准IMU的噪声密度和随机游走噪声 2 kalibr包标定相机的内外参数 xff0c 相机与IMU之间
  • 如何在Win11中安装wsl Ubuntu系统

    目录 前言正文一 环境二 在 Windows 11 上启用 WSL四 按照官方文档进行安装五 安装ubuntu系统六 下载vcxSrv七 运行wsl八 总结 参考 前言 在笔记本上安装一下环境 xff0c 便于平常的工作 正文 一 环境 w
  • 下载PX4固件时网络太慢,经常出现克隆失败

    下载PX4固件时 xff0c 官网给的指令是 git clone https github com PX4 PX4 Autopilot git recursive 需要进行循环克隆 xff0c 在克隆过程中可能出现以下的情况 无法克隆 39
  • roslaunch mavros px4.launch 出现的问题

    在运行roslaunch mavros px4 launch fcu url 61 udp 14540 64 127 0 0 1t 14557 时出现了以下错误 xff0c 这是由于 符号是中文符号导致的 xff0c 切换成英文的即可 RL
  • 解决Ubuntu执行sudo命令后提示无法解析主机

    解决Ubuntu执行sudo命令后提示无法解析主机 异常现象异常原因查看修改主机名普通用户与管理员间的切换 异常现象 异常原因 etc hostname和 etc hosts文件中主机名称不一致导致 xff0c 将其修改一致即可 修改此文件
  • rosdep update 指令超时问题

    在执行rosdep update后出现超时问题 xff0c 报如下错误 reading in sources list data from etc ros rosdep sources list d ERROR unable to proc
  • 使用git --recursive进行循环克隆,由于网络原因,出现克隆失败的情况。

    git clone recursive 用于循环克隆git子项目 xff0c 但由于网络原因 xff0c 经常会出现克隆失败的情况 xff0c 这时不得不删掉克隆文件夹 xff0c 全部重新来过 xff0c 我们可以先将主文件克隆下来 xf
  • minimumsnap(1)微分平坦特性(Differential Flatness)

    本文内容参考论文 Minimum Snap Trajectory Generation and Control for Quadrotors Daniel Mellinger and Vijay Kumar 从名字可以看出 xff0c 我们
  • 未安装Ceres

    编译VINs的时候 xff0c 遇到了这个问题 xff0c 是没安装Ceres导致的 96 CMake Error at VINS Mono camera model CMakeLists txt 19 find package By no
  • 费雪信息场增量建场实际实验

    写在前面 上一阶段的工作是基础是在张子潮大佬的费雪信息场这几篇论文的基础上进行的 Beyond Point Clouds Fisher Information Field for Active Visual Localization Zic
  • XTDrone+VINs+fast-planner

    接下来的工作需要把XTDrone VINS和fast planner集成到一起 在XTDrone集成VINs按照XTDrone使用手册来就可以了 xff0c 按照仿真平台基础配置 xff0c PX4飞控与EKF配置和视觉惯性里程计 xff0
  • 代码随想录算法训练营第19天|77. 组合

    代码随想录算法训练营第19天 77 组合 77 组合 题目链接 提交代码 span class token keyword class span span class token class name Solution span span
  • 【无标题】

    代码随想录算法训练营第1天 216 组合总和III 17 电话号码的字母组合 216 组合总和III 题目链接 提交代码 span class token keyword class span span class token class
  • 代码随想录算法训练营第20天回溯系列

    代码随想录算法训练营第1天 704 二分查找 27 移除元素 39 组合总和 题目链接 提交代码 span class token keyword class span span class token class name Solutio
  • SMPL-CN

    paper reading 为方便理解smpl文章的主要实现思想 xff0c 此文为论文中文解读 xff0c 资料来源zju 日后有空 xff0c 会写出论文的主要推导过程以及值得注意的重点 摘要 xff1a 我们提出了一个人体形状和姿势相
  • 自动驾驶的实现之路——几大关键传感器应用解析

    来源 xff1a MEMS 随着近两年来智慧汽车 车联网等等概念的兴起 xff0c 汽车自动驾驶的各种科技进展不断占据媒体版面 xff0c 引起了全球的关注和各国政府的支持 对于大部分人来说 xff0c 吃着火锅唱着歌 轻轻松松地直达目的地
  • 从零开始 CMake 学习笔记 (F)Build Type

    从零开始 CMake 学习笔记 xff08 F xff09 Build Type 开始前先默念三遍口诀 xff1a Declare a targetDeclare target s traitsIt s all about targets
  • 利用tf.reset_default_graph()重置default graph计算图以及nodes节点

    import tensorflow as tf tf reset default graph 利用这个可清空defualt graph以及nodes with tf variable scope Space a a 61 tf consta
  • c++继承多态知识感悟

    组合与继承 先说说组合 xff0c 当设计一个新的类的时候 xff0c 可以将一个已有类的对象作为成员 xff0c 然后通过成员对象实现已有类的功能 xff0c 类的对象成员与内置类型数据成员的声明语法一样 我们很早就开始接触并使用了 再说