首页 > 其他分享 >多态、虚函数表、底层实现、多重继承的问题及处理

多态、虚函数表、底层实现、多重继承的问题及处理

时间:2023-05-19 17:47:06浏览次数:49  
标签:多重 函数 成员 派生类 多态 基类 指针 底层

本文代码摘自 http://dwz.date/PST; 视频解析:十分钟带你搞明白虚函数、虚表、多态的原理以及多重继承带来的问题_哔哩哔哩_bilibili

1、多态:

  基类指针只能调用基类的成员函数,不能调用派生类的成员函数;如果在基类的成员函数前加上virtual 关键字,把它声明为虚函数;基类指针就可以调用派生类的同名函数;通过派生类中的同名函数访问派生类的成员变量;有了虚函数,基类指针指向基类对象时,就使用基类的成员函数和数据,指向派生类的对象时,就使用派生类的成员函数和数据;基类指针表现出的多种形式,称为多态;

  派生类重载时最好在参数列表后 加上 override 关键字,防止函数名写错;

  基类的引用也可以使用多态;

  如果基类中有虚函数,对象的内存模型中就会有一个虚函数表,表中存放了基类的函数名和地址;派生类中重定义了基类的虚函数,创建派生对象时,将用派生类的函数取代虚函数表中的基类的函数;

静态多态:类的普通成员函数地址是静态的,在编译阶段已经指定;(函数重载、函数模板);

动态多态:动态绑定,运行时去确定的对象类型及选择的函数;用于解决基类指针调用派生类中重写函数 问题;

2、基础的多态,编译器实现

基类base,派生类A、派生类B;

 

 

 

3、多重继承之后,多态出现的问题:

 

标签:多重,函数,成员,派生类,多态,基类,指针,底层
From: https://www.cnblogs.com/xuan01/p/17415805.html

相关文章

  • 获取树结构表最底层节点信息
    1、这里以mongo表为例//1、查询根节点IDList<T>list=mongoTemplate.find(Query.query(Criteria.where("parentId").is("")),T.class);List<String>rootIds=list.stream().map(x->x.getId()).collect(Collectors.toList());//2、根据根节点ID查询出所......
  • spring5中IOC容器(底层原理1-3)
    什么是IOC1.控制反转:把对象创建和对象之间的调用过程,交给spring进行管理2.使用IOC目的:为了耦合度降低IOC底层原理xml解析,工厂模式,反射 画图讲解IOC底层原理  IOC过程:  IOC接口1.IOC思想基于IOC容器完成,IOC容器底层就是对象工厂2.Spring提供IOC容......
  • 记录stm32多重ADC模式
    为什么要使用多重ADC模式呢?主要是馋多重ADC模式下可以轻易实现采样率翻倍的效果实现原理可以参考这篇ADI的文章:交织采样ADC基础的基本原理|亚德诺半导体(analog.com)总结:解决了单个ADC采样需要等待转换结束才能继续采样的问题,代价是使用更多的ADC上个......
  • 记一次排查:接口返回值写入excel后,从单元格copy出来的数据会带有多重引号的问题
    在项目里刚好有3个服务,同一个网关内层的3个服务,两个php的,一个golang的,为了提高负载以及进行分流,部分客户的接口调用会被网关自动分配到go服务。恰好为了测试,我写了一个全量用户的生产、测试环境调用接口返回结果进行对比的脚本,于是发现了题中的问题:两个php服务里的接口返回值写入......
  • 【C++】多态(下)
    @TOC1.单继承中的虚函数表整体代码#include<iostream>usingnamespacestd;classBase{public:virtualvoidFunc1(){cout<<"Base::Func1()"<<endl;}virtualvoidFunc2(){cout<<"Base::Func......
  • POLL底层驱动机制
    1前言1.1阻塞与非阻塞IOAPP调用open函数时,不要传入“O_NONBLOCK”。APP调用read函数读取数据时,为阻塞io。APP调用open函数时,传入“O_NONBLOCK”表示“非阻塞”。APP调用read函数读取数据时,如果驱动程序中有数据,那么APP的read函数会返回数据,否则也会立刻返......
  • mysql 底层数据存储结构
    内存和磁盘每次交互都是完整的页,数据页里面存放的是行(不仅仅是数据库的数据行,还有行格式等)页(16k,计算机与内存的最小单位)的上层单位还有区(一个区存放64个页,64*16k=1024k,刚好1M),区上面是段(一个或多个区组成),段上面是表空间(一个或多个段组成)行格式showtablestatuslike't_u......
  • 开发板三菱FX3U底层源码,总体功能和指令可能支持在RUN中下载程序,支持注释的写入和读取,
    开发板三菱FX3U底层源码,总体功能和指令可能支持在RUN中下载程序,支持注释的写入和读取,支持脉冲输出与定位指令(包括PLSY/PWM/PLSR/PLSV/DRVI/DRVA等指令)。对于FX3U,支持波特率9600/19200/38400/57600/115200自适应ID:58199670048570922......
  • 开发板FPGA电机控制源码(verilog+nios2架构)FPGA电机控制源码, 方案为单FPGA方案才用
    开发板FPGA电机控制源码(verilog+nios2架构)FPGA电机控制源码,方案为单FPGA方案才用底层verilog+应用层nios2的软件架构,很具有学习价值。包括编码器模块算法,坐标变换算法,矢量调制算法等等。注:此代码不适合新手小白。YID:1611669469428085......
  • Docker底层原理(一)
    Docker底层原理(一)1Docker介绍1.1Docker是什么Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用及依赖包到一个轻量级、可移植的镜像中,然后发布到任何流行的Linux机器上。1.2Docker能解决什么问题1.2.1高效有......