c++ 杂项

news2024/9/28 15:19:30

简答题

1、什么是虚函数?什么是纯虚函数?

虚函数是在类中定义函数时,在函数前加 virtual 关键字。父子类中只有一个该函数。

如果子类中没有重写该虚函数。那么父子类空间中使用的都是父类定义的该函数。

如果子类中重写了该虚函数,那么父子类空间中使用的都是子类重写的该虚函数。

如果当前类的函数设置成虚函数,那么该类的子子孙孙类中的该函数都是虚函数。

纯虚函数是定义类时,类中的某些成员函数没有实现的意义,仅仅只是该类中应该拥有的功能。

想要让子类来重写后,使用父类指针或引用指向子类对象时来调用该重写的虚函数

纯虚函数定义格式: 虚函数头 = 0;

包含纯虚函数的类,称为抽象类,抽象类是不能实例化对象的

纯虚函数需要子类进行重写,如果子类没有重写父类的纯虚函数,那么该函数在子类中也还是纯虚函数,子类也是抽象类

2、基类为什么需要虚析构函数?

当父类指针指向子类在堆区空间中的对象时,会先构造父类再构造子类,整个子类空间会全部构造出来。当使用delete关键字释放父类指针时,由于父类指针的作用域只是父类空间的内容,只能释放父类空间,子类自己的空间无法释放,导致内存泄漏。使用虚析构函数可以解决内存泄漏问题。

3、如何初始化 const 和 static 数据成员?

初始化 const 数据成员:对于const数据成员,一般在类定义的同时被初始化。

初始化 static 数据成员:static 数据成员初始化只在第一次执行时发生一次。

4、指针和引用的区别

1、引用使用标识符&,指针使用标识符*

2、没有空引用,但有空指针

3、没有多级引用,但有多级指针

4、没有引用数组,但是可以定义指针数组

5、定义引用时必须进行初始化,定义指针时可以不用初始化

6、引用一旦指定目标后,就不能进行修改了,而指针后期可以修改指向

7、引用就是目标本身,而指针记录的是目标的起始地址

8、引用不占内存空间,而指针需要占内存空间

9、引用的大小跟目标的大小保持一致,而指针的大小都是8字节(64位操作系统)

5、new 和 malloc 的区别

1、malloc\free是标准库中提供的函数,属于函数调用,而new\delete是C++中的关键字,无需开辟函数内存空间

2、malloc\free申请空间时,没有单个和连续空间的区别,而new\delete申请时区分单个和连续空间的操作

3、 malloc\free申请空间时,需要手动计算要申请空间的大小,而new\delete申请空间时,会自动计算大小

4、malloc\free申请空间时,以字节为单位,而new\delete申请空间时,以数据类型为单位

5、new申请空间时可以给空间进行初始化,而malloc不可以

6、 malloc申请出的空间结果是void*类型,使用时需要根据具体的情况进行强转,而new申请空间时,申请什么类型的空间返回的就是什么类型的指针

7、 new申请对象空间时,会自动调用该对象所在类中的构造函数,而malloc不会

8、delete释放对象空间时,会自动调用该对象所在类的析构函数,而free不会

9、 在new和delete的底层实现中,还是调用了c语言中的malloc、free

6、内存泄漏怎么产生的?如何避免?

使用 new 分配了内存,但是没有相应的 delete 来释放它。

如何避免:对于每次使用 new 分配的内存,都应该有相应的 delete 来释放。对于使用 new[] 分配的数组,应该使用 delete[] 来释放。确保异常安全,即在抛出异常之前清理已分配的资源

7、C++的内存分区

代码区:存储程序的可执行代码,它是只读的,以防止程序在运行过程中被意外修改。

数据段: 已初始化数据段:存储已初始化的全局和静态变量。 未初始化数据段:存储未初始化的全局和静态变量。

堆:用于分配动态内存,程序运行时通过 malloc函数分配的内存。

栈:存储局部变量和函数调用信息(如返回地址、参数等)。当函数调用完成后,分配给这个函数的栈空间会被释放。

常量区:存储常量数据,例如字符串字面量和其他编译时常量,这个区域通常也是只读的。

8、常用的数据结构有哪些?时间复杂度和空间复杂度如何使用

数组: 时间复杂度:O(n^2) ,空间复杂度:O(n)。

链表:时间复杂度:访问,查找O(n),插入和删除O(1)。 空间复杂度:O(n)。

栈: 时间复杂度:O(1)。 空间复杂度:O(n)。

队列:时间复杂度:访问,查找O(n),插入,删除O(1)。 空间复杂度:O(n)。

哈希表: 时间复杂度:O(n), 空间复杂度:O(n)。

二叉树:时间复杂度:O(log n), 空间复杂度:O(n)。 

知识梳理:

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

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

相关文章

【Python基础(一)】

学习分享 一、基本语法1、输出print语句2、常量的写法3、运算符 (/) 与(//)4、字符串5、列表5.1、列表查询元素是否存在5.2、列表查询元素是否存在5.3、身份运算符5.4、列表的增删改查 6、元组6.1、tuple() 7、字典8、函数8.1、值传递8.2、引用传递8.3、函数的传参 二、文件的操…

小北的JDK1.8下载、安装和环境配置教程——附件资源

​前言 亲爱的友友们,欢迎来到小北博客!今天,我们将一起探索如何下载、安装并配置JDK 1.8,这是Java开发中一个非常关键的步骤。无论你是Java新手还是资深开发者,掌握JDK的正确安装和配置都是必不可少的。Java Download…

828华为云征文 | 基于华为云Flexus云服务器X搭建部署——AI知识库问答系统(使用1panel面板安装)

🚀对于企业来讲为什么需要华为云Flexus X来搭建自己的知识库问答系统??? 【重塑知识边界,华为云Flexus云服务器X引领开源问答新纪元!】 🌟 解锁知识新动力,华为云Flexus云服务器X携…

【工具分享】Jigsaw勒索病毒解密工具

前言 Jigsaw勒索软件首次出现在2016年,以其独特的威胁手段迅速在网络安全界引起广泛关注。该恶意软件因其在勒索信中使用了恐怖电影《电锯惊魂》中的角色Billy the Puppet的图像而得名。Jigsaw不仅会加密受害者的文件,还会逐渐删除这些文件以迫使受害者…

基于nodejs+vue的游戏陪玩系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

大数据毕业设计选题推荐-国潮男装微博评论数据分析系统-Hive-Hadoop-Spark

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

当大模型成为新一代操作系统,我们如何转型AI产品经理?

大模型无疑是最近科技圈最炙手可热的时尚单品,跟AIGC能沾上边的工作岗位都成为行业香饽饽。许多产品经理朋友与斯年讨论如何转型AI产品经理,今天想通过用户体验五要素的逻辑框架,谈谈传统型产品经理 VS. AI型产品经理的差异。最后分享几点在转…

教师工作量数字化管理平台

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

mysql数据库的基本管理

目录 一.数据库的介绍 二.mariadb的安装 三.软件基本信息 四.数据库开启 五.数据库的安全初始化 六.数据库的基本管理 七.数据密码管理 八.用户授权 九.数据库的备份 十.web控制器 一.数据库的介绍 1.什么是数据库 数据库就是个高级的表格软件 2.常见数据库 Mysql Oracl…

Type-C接口相关知识:【总结大全】

Type-c现在非常通用了,所以了解Type-c也变得十分有必要了,还是秉承了解就要了解清楚的原则,我们深入的看看Type-c接口。 Type-c主要是取代上一代Micro usb接口,那么Type-c有什么优点呢? 正反可插,使用时不…

Vite使用vite-plugin-compression打包资源压缩

https://github.com/vbenjs/vite-plugin-compression 安装所需依赖 yarn add vite-plugin-compression -D压缩前 压缩后 使用 vite.config.ts import viteCompression from vite-plugin-compressionexport default defineConfig({plugins: [vue(),viteCompression({verbose: …

【redis-03】redis缓存穿透、缓存击穿、缓存雪崩

redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756【三】redis缓存穿透、缓存击穿、缓存雪崩htt…

如何用IDEA连接HBase

编写java代码,远程连接HBase进行相关的操作 一、先导依赖 代码如下: 二、连接成功

scroll-view滚动条在ios上没有显示滚动条,安卓上显示,亲测有效果

问题描述 微信小程序的scroll-view在ios上没有显示滚动条,但是如果在安卓设备上会显示一个滚动条解决方案 微信小程序只需要在scroll-view上面添加show-scrollbar“{{false}}” enhanced"{{true}}"即可解决 UniApp则修改成:show-scrollbar“false” enh…

图像背景去除的最佳工具和 PNG 网站

PNG 网站是专业人士、设计师和任何需要具有透明背景的高质量图像的人的重要资源。这些网站提供数百万个 PNG,这对于数字项目很有价值。更不用说,这些格式具有保持质量和支持透明度的能力。在这篇文章中,我们将探讨提供无数满足不同需求的 PNG…

产品管理 - 互联网产品(1):产品战略

1、产品方向 即产品目标、目的、方向等。根据人、公司、管理等等因素决定了产品目标有所不同,常见的产品目标有:收入、用户、市场占有率、品牌影响力、资源平衡、财务报表、抛砖引玉、融资规划等 1) 收入 从规划开始就是以赚钱为目的,不管…

SpringBoot(Java)实现MQTT连接(本地Mosquitto)通讯调试

1.工作及使用背景 工作中需要跟收集各种硬件或传感器数据用于Web展示及统计计算分析,如电表、流量计、泵、控制器等物联网设备。 目前的思路及解决策略是使用力控或者杰控等组态软件实现数据的转储(也会涉及收费问题),通过组态软件…

【Python语言初识(五)】

一、文件和异常 在Python中实现文件的读写操作其实非常简单,通过Python内置的open函数,我们可以指定文件名、操作模式、编码信息等来获得操作文件的对象,接下来就可以对文件进行读写操作了。这里所说的操作模式是指要打开什么样的文件&#…

软件测评CNAS认可实验室程序文件之检测报告的编制和交付程序

软件测评实验室在申请CNAS认可时,需要根据相关准则文件的要求,建立质量管理体系,其中程序文件是质量管理体系中非常重要的一环。在前面的文章中,我们为大家整体介绍了CNAS软件测评实验室程序文件主要都有哪些,以及对部…

尾巴生活彩虹泥餐盒怎么样?测评10元的国产猫罐头:高爷家、希喂、尾巴生活

我家迎来了一位缅因猫成员,这家伙体型魁梧,颜值爆表,走起路来自带王者风范。说到食量,简直是猫咪界的“大胃王”,一顿饭顶得上四只小猫咪的总和。二三十元一罐的进口罐被它光速炫完,简直是给家里的钱包“瘦…