深入理解派生类

深入理解派生类

Created time: August 6, 2023 10:10 AM

运行时多态和编译时多态

多态是面向对象编程中的一个重要概念,它可以让我们以一种更加灵活的方式来处理对象,使得程序更加易读易维护。在C++中,多态可以分为两种类型:运行时多态和编译时多态。

运行时多态

运行时多态是指程序在运行时才能确定要调用哪个函数,它是通过虚函数和动态绑定机制来实现的。虚函数是在基类中声明的一种特殊函数,它可以被派生类重写。动态绑定机制是指在运行时根据对象的实际类型来确定要调用哪个函数。

运行时多态的优点在于它可以让程序更加灵活,可以在运行时动态地改变对象的行为。但是它也存在一些缺点,比如函数调用的效率较低。

编译时多态

编译时多态是指程序在编译时就能确定要调用哪个函数,它是通过函数重载和模板机制来实现的。函数重载是指在同一个作用域内定义多个同名函数,但是它们的参数个数或者类型不同。模板机制是指在程序中定义一种通用的函数或类,可以用不同的参数类型来实例化它。

编译时多态的优点在于函数调用效率高,但是它也存在一些缺点,比如不能动态地改变对象的行为。

总的来说,编译时多态和运行时多态都有自己的优点和缺点,需要根据具体情况选择合适的方式。在实际编程中,我们通常会同时使用这两种多态来实现更加灵活的程序。

派生类继承,包括实现继承和接口继承。

实现继承通过共享基类的成员来减少实现的工作量。

接口继承通过共工基类提供的接口,允许不同派生类,有自己的不同实现,即运行时多态。

派生类只能访问基类中的public和protect成员,不能访问private成员。

派生类包含与基类相同的成员时,需要使用域访问基类名称。

派生类构造顺序

当创建一个派生类对象时,会按照以下顺序调用构造函数:

  1. 调用基类的构造函数;
  2. 按照声明的顺序调用成员对象的构造函数;
  3. 调用派生类自身的构造函数。

在调用派生类的构造函数前,基类的构造函数和成员对象的构造函数都已经完成了。因此,在派生类的构造函数中,可以直接使用基类的成员和成员对象。

需要注意的是,在派生类的构造函数中,如果没有显式地调用基类的构造函数,则会调用默认的基类构造函数。如果基类没有默认构造函数,则需要在派生类的构造函数中显式地调用基类的构造函数。

同时,在派生类的构造函数中,也可以显式地调用基类的构造函数,并传递相应的参数。在这种情况下,需要使用初始化列表来调用基类的构造函数。

总的来说,派生类构造顺序是按照基类构造函数、成员对象构造函数、派生类构造函数的顺序依次执行的,需要开发者根据实际情况进行调用和传递参数的处理。

Base Class Constructor
Member Object Constructor
Derived Class Constructor

每个类都可以初始化其成员和基类,但不能初始化其基类的成员和基类的基类。

派生类析构顺序

当派生类对象被销毁时,析构函数的调用顺序与构造函数的调用顺序相反。这意味着,首先会调用派生类的析构函数,然后是成员对象的析构函数,最后是基类的析构函数。

需要注意的是,如果基类的析构函数不是虚函数,则只会调用基类的析构函数。这可能会导致内存泄漏和其他问题,因此通常建议将基类的析构函数定义为虚函数,如果该类被用作基类。

总的来说,在派生类中析构的顺序是:

  1. 派生类析构函数
  2. 成员对象的析构函数
  3. 基类的析构函数

开发者应确保他们的析构函数实现正确,以避免在对象销毁时出现内存泄漏和其他问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/25714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从URL取值传给后端

从URL传值给后端 http://127.0.0.1:8080/blog_content.html?id8点击浏览文章详情,跳转至详情页面 从 url 中拿出文章 id,传给后端 首先拿到url然后判断是否有值,从问号后面取值params.split(&) 以 & 作为分割然后遍历字符数组 param…

TFTP 的使用操作指南(轻松入门版)

(꒪ꇴ꒪ ),hello我是祐言博客主页:C语言基础,Linux基础,软件配置领域博主🌍快上🚘,一起学习!送给读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误&#x…

RabbitMQ 生产者-消息丢失 之 场景分析

生产者-消息丢失 之 场景分析 生产者消息丢失的场景消息无法到达RabbitMQ连接断开信道关闭 RabbitMQ无法将消息入队交换机不存在无匹配队列 消息过期丢失消息丢失场景对比 生产者消息丢失的场景 生产者发送消息的流程如下:首先生产者和RabbitMQ服务器建立连接&…

opencv基础 42- Scharr算子-cv2.Scharr()(边缘检测基础)

Scharr算子是用于计算图像梯度的一种常用算子,特别是在边缘检测任务中。它是Sobel算子的改进版本,旨在提供更加准确和敏感的边缘检测。 在离散的空间上,有很多方法可以用来计算近似导数,在使用 33 的 Sobel 算子时,可能…

简述Mysql索引

一、索引概述 1.1 索引概述 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 索引的本质:索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”,满足特定查找算法。 这些数据结…

uniapp小程序console.log在微信开发者工具中不打印问题

最近在开发一款uniapp小程序,发现console.log在微信开发者工具中不打印,但在H5页面就能够有打印输出,于是在网上寻找原因… 主要是由于vue.config.js文件中有设置发布时删除console的配置,如下: 官网参考地址&#x…

静态路由 (华为设备)

默认路由:当路由器 收到目标地址不在路由表中的数据包时,将会 全部 发送 到 默认路由所定义的吓一跳 ,作为位置地址 数据包的 最后求助方式,这就是默认路由器的功能,默认路由的使用,可以大大的节省系统资源…

LeetCode 130. 被围绕的区域

题目链接:130. 被围绕的区域 题目描述 给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 示例1: 输入:board [[“…

SQL Server数据库如何添加mysql链接服务器(Windows系统)

SQL Server数据库如何添加mysql链接服务器(Windows系统) 一、说明二、下载mysql的odbc驱动三、安装mysql odbc四、配置ODBC4.1 控制面板→ODBC数据源(64位)→双击打开4.2 添加msql odbc数据源 五、测试添加是否成功六、打开SSMS&a…

ChatGPT的 6 个强势升级:重点是超强的文件上传和分析功能也来啦!

发布会核心概览 前日凌晨,OpenAI在社交平台上宣布了一系列新功能,旨在提升用户体验。这6 个新功能包括 “提示示例、回答建议、GPT-4默认选择、可分析上传多个文件、保持登录状态和键盘快捷键”。 其中,可分析上传多个文件的功能非常强大。结…

react搭建在线编辑html的站点——引入grapes实现在线拖拉拽编辑html

文章目录 ⭐前言⭐搭建react ts项目⭐引入grapes 插件⭐结束 ⭐前言 大家好,我是yma16,本文分享关于react搭建在线编辑html的站点。 react 发展历史 React是由Facebook开发的一种JavaScript库,用于构建用户界面。React最初发布于2013年&…

nginx反向代理及负载均衡的实现

目录 1.nginx反向代理 2.nginx负载均衡 3.nginx反向代理及负载均衡实现 nginx反向代理 4台主机都需要的操作: 两台服务器操作: 两台主机服务器进行测试; nginx负载均衡配置 4.nginx配置其他参数 多虚拟机访问 后端服务器日志中需要…

小鱼深度产品测评之:阿里云低代码开发平台魔笔,一站式的应用全生命周期管理,高效解决应用研发、迭代、运维的问题。

低代码开发平台魔笔测评 1、引言2、购买流程3、魔笔3.1添加应用3.2 应用列表3.1.1 列表应用展示3.2.1 列应用操作3.2.1.1 自动保存3.2.1.2 复制功能3.2.1.3 编辑功能3.2.1.4 删除 3.3 应用设计器3.3.1应用设计器入口3.3.2 设计器体验3.3.2.1 设计器页面展示3.3.2.2 设计器页面查…

网络安全预警分类流程

网络安全预警指南 随着信息技术的广泛应用与快速发展,传统业务与信息系统的融合程度不断加深,网络安全对国家政治、经济、文化、公共服务活动的影响进一步增大。网络安全形势日趋复杂,安全威胁不断变化,利用网络漏洞、恶意程序从…

日常随笔——如何把excel题库转换为word打印格式

将Excel题库转换为Word可以通过编程的方式实现。以下是一个使用Python的示例代码,该代码使用openpyxl库读取Excel文件,并使用python-docx库创建和保存Word文档。 首先,请确保已经安装了 openpyxl 和 python-docx 库。可以使用以下命令进行安…

Unity 实现字幕打字效果

Text文本打字效果,TextMeshPro可以对应参考,差距不大,改改参数名就能用。改脚本原本被我集成到其他的程序集中,现在已经分离。 效果 实现功能 1.能够设置每行能够容纳的字数和允许的冗余 2.打字效果 3.每行打完上移 4.开头进入&…

真我V3 5G(RMX2200 RMX2201)解锁刷机全过程

安卓系统新Rom包为GSI,更具有通用性,可以比较放心刷。 原厂系统垃圾多、广告多,甚至热点功能不支持ipv6,严重偏离热点机的定位。 主要参考 https://www.bilibili.com/read/cv20730877/https://www.bilibili.com/read/cv2073087…

Oracle-expdp报错ORA-39077、06502(Bug-16928674)

问题: 用户在使用expdp进程导出时,出现队列报错ORA-39077、ORA-06502 ORA-31626: job does not exist ORA-31638: cannot attach to job SYS_EXPORT_SCHEMA_01 for user SYS ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95 ORA-06512: at "SYS.KUPV$…

Python 子进程在运行时读取标准输出

文章目录 Python 子进程在运行时读取标准输出方法 1:在 Python 中运行时使用 check_call 读取子进程的标准输出方法 2:在 Python 中运行时轮询进程以读取子进程的标准输出本文的主要目的是演示如何读取在 Python 中执行的子进程的标准输出。 Python 子进程在运行时读取标准输…

uni-app离线打包高德地图导入android studio不能正常显示

本人使用的uni-app SDK版本:Android-SDK3.8.7.81902_20230704 1.导入以上文件,依赖已经自动添加了 2.确保这个正常引入 3.修改AndroidMainifest.xml,添加自己的密钥