9.26作业

C++ 面试题

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

虚函数:父子类中,在父类中的函数需要在子类中进行重写,重写后父子类空间中使用的都是重写后的函数,该函数就是虚函数,虚函数的声明需要在函数前加virtual。
纯虚函数:父子类中,在父类中声明为虚函数但是没有实现的函数,通过在函数声明后加上 = 0 来表示是纯虚函数,包含纯虚函数的类是抽象类,无法实例化对象,且纯虚函数需要子类进行重写,如果子类没有重写,那么子类也是抽象类。

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

解决多态遗留下的问题:当父类指针指向子类对象在堆区申请的空间时,申请空间会先构造父类,再构造子类,但是在使用delete释放父类指针时,由于父类指针的作用域仅仅只是父类空间的内容,可以完成对父类空间的释放,但是,子类自己的空间无法释放,导致内存泄漏。
解决方法:在父类中设置虚析构函数,确保在通过父类指针删除子类对象时,能够正确调用子类的析构函数,避免内存泄露。

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

const数据成员必须在类的构造函数的初始化列表中完成初始化工作,不能在类定义中直接初始化。
static数据成员是静态成员变量,不依附于类对象而存在,在类中声明,必须在类外部定义并初始化。

4.指针和引用的区别

指针是记录指向目标的起始地址;指针需要8字节的存储空间;指针可以有空指针;指针指向目标后可以修改指向目标;定义指针时可以不初始化;指针还可以定义指针数组;指针的偏移,就是偏移目标单位内存空间的大小。
引用是引用目标的别名,本质就是引用目标;引用和引用目标是同一个存储空间;引用没有空引用;引用指定目标后,不可以进行修改;引用必须要初始化;引用中没有引用数组;引用在进行偏移时,就是对目标进行的偏移。

5.new 和 malloc的区别

1、malloc是C语言中标准库中提供的函数,new是C++中的关键字,无需开辟函数内存空间;
2、malloc没有单个和连续申请的区别,new申请空间时区分单个和连续空间的操作;
3、malloc申请空间时需要手动计算要申请空间的大小,new申请空间时,会自动计算大小;
4、malloc申请空间时以字节为单位,new申请空间时以数据类型为单位;
5、malloc申请空间时无法进行初始化,new可以进行初始化工作;
6、malloc申请空间后返回的是void*类型,使用时需要根据具体的情况进行强转,new申请空间时,申请什么类型的空间返回的就是什么类型的指针;
7、new申请对象空间时,会自动调用该对象所在类中的构造函数,而malloc不会。

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

内存泄漏的产生原因:
1、未释放动态分配的内存:使用 new 或 malloc 分配内存后,未调用 delete 或 free 释放内存。
2、异常处理:在分配内存后发生异常,导致后续的释放代码未被执行。
3、指针丢失:将指针重新赋值或超出作用域,导致原有指针指向的内存无法访问。
4、循环引用:在使用智能指针时,两个或多个对象相互引用,导致内存无法释放。
避免内存泄漏的方法
1、确保释放内存:在使用 new 或 malloc 分配内存后,确保在适当的位置调用 delete 或 free。
2、异常安全:使用 RAII(资源获取即初始化)原则,确保在构造时分配资源,在析构时释放资源。
3、避免指针丢失:在重新赋值指针之前,确保释放原有的内存,或者使用智能指针来管理内存。
4、使用智能指针:C++11 引入了智能指针(如 std::unique_ptr 和 std::shared_ptr),它们会自动管理内存,避免手动释放内存的错误。

7.C++的内存分区

1、代码段:存储程序的可执行代码,通常是只读的,以防止程序在运行时意外修改其指令。
2、数据段
.bss 区用于存储未初始化的全局变量和静态变量;
.data 区用于存储已初始化的全局变量和静态变量;
.ro区用于存储const修饰的变量常量;
.text 区用于存储文本和代码段。
3、堆区:用于动态内存分配。通过 new 和 malloc 等函数分配的内存都来自堆。
4、栈区:用于存储局部变量、函数运行空间和返回地址。栈的大小通常是固定的,超出栈的大小会导致栈溢出。

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

数组:固定大小的线性数据结构,存储相同类型的元素。时间复杂度:访问:O(1),插入/删除(在中间):O(n),空间复杂度:O(n)。
链表:由节点组成的线性数据结构,每个节点包含数据和指向下一个节点的指针。时间复杂度:访问:O(n),插入/删除(在头部或尾部):O(1),空间复杂度:O(n)。
:后进先出(LIFO)的数据结构,支持在一端插入和删除元素。时间复杂度:Push\Pop(插入\删除):O(1),空间复杂度:O(n)。
队列:先进先出(FIFO)的数据结构,支持在一端插入元素,在另一端删除元素。时间复杂度:插入\删除:O(1),空间复杂度:O(n)。
哈希表:通过哈希函数将键映射到值的集合,支持快速查找。时间复杂度:查找\插入\删除:O(1)(平均情况),空间复杂度:O(n)。
二叉树:每个节点最多有两个子节点的树形结构。时间复杂度:查找\插入\删除:O(n)(最坏情况),空间复杂度:O(n)。
时间复杂度:用于评估算法在输入规模增加时所需的时间。通常使用大 O 符号表示。
空间复杂度:用于评估算法在执行过程中所需的额外空间。也使用大 O 符号表示。

思维导图在这里插入图片描述

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

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

相关文章

从自身经历浅谈对于C++/Java的认识

1.声明 因为一些其他的原因,我决定从C转到java方向学习,后期可能就要换方向了,以后主要学习这个java相关的这个技术了,起码暂时不会学习这个C里面的内容了; 2.我的感慨 当时选方向的时候,我自己就是选的…

详解 Spring Boot 的 RedisAutoConfiguration 配置

引言 带大家分析 Spring Boot 内置的有关 Redis 的自动配置类【RedisAutoConfiguration】。 1. Spring Data Redis Spring Data Redis 是 Spring Data 家族的一部分,它提供了从 Spring 应用程序中轻松配置和访问 Redis 的功能。 我们来看看官方介绍的特性&#xff…

超60%项目聚焦智能体,百度“文心杯”创业大赛卷起来了

“通过AI Native工具AI Native工作流AI Native创作者协同,我们将传统A级漫画的创作成本降低了62%。”水母智能创始人兼CEO苗奘表示,“4月份决定报名参加‘文心杯’创业大赛,除了百度提供的奖金和资源外,更吸引我的是Robin的理念&a…

Synchronized对字符串上锁?

HTTP去请求就会像上面那种自动加个new String(),就会导致锁的线程不是同一个对象,可以通过获取对应常量达到效果 但还有个问题,字符串常量是存在JVM的常量池中。常量池是全局的。所以在其他地方有引用到相关常量时&…

OCI 简介:Kubernetes 环境下从代码到容器的全流程

OCI 简介 在容器化技术的演进中,OCI(Open Container Initiative)提供了一套标准化的规范,帮助统一容器的构建、分发和运行。OCI 规范包含三个部分: OCI Image-spec:定义了容器镜像的结构,确保…

WAF,全称Web Application Firewall,好用WAF推荐

WAF,全称Web Application Firewall,即Web应用防火墙,是一种网络安全设备,旨在保护Web应用程序免受各种Web攻击,如SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)等。 WAF通…

STM32堆栈溢出Bug

可以看到x和buf交换位置后,x处于0x200006B0地址上是不会被函数B影响到的,实际上B函数对buf赋值的过程是出现了越界行为的,所以导致了x在buf地址之后的话会被意外修改掉值。

海外媒体投稿:如何运用3种国内外媒体套餐发稿突出重围?

在当今瞬息万变的经营环境中,突出重围营销推广是每家企业都需要思考的问题。为了能突出重围并提升影响力,国内外媒体套餐内容成为了一个非常受欢迎的挑选。下面我们就为大家讲解如何运用三种不同种类的国内外媒体套餐内容来推广突出重围。 2.微博营销新浪…

Nacos笔记

nacos注册中心: nacos注册中心得单击非持久化搭建: 单机:指的是 Nacos 运行在单个实例上,通常用于开发和测试环境。非持久化:表示注册的信息(如服务实例、元数据等)不会被保存在数据库中。Nac…

Python 从入门到实战29(目录的操作)

我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们讨论了文件的打开、创建、关闭、读取的相关知识。今天…

智慧政务助力实现服务民生新突破

在数字化转型的浪潮中,中国移动紧密结合人工智能(AI)技术,推动政务服务的智能化升级。近日,中国移动正式发布政务大模型3.0版本,以科技创新提升政务效率,实现服务民生的新突破。 为什么…

从0到1训练私有大模型技能与应用实现

1.背景 近期,GPT大模型的发布给自然语言处理(NLP)领域带来了令人震撼的体验。随着这一事件的发生,一系列开源大模型也迅速崛起。依据一些评估机构的评估,这些开源模型大模型的表现也相当不错。一些大模型的评测情况可…

关于Pencils Protocol 近期市场活动,通读这篇就够!

Pencils Protocol是Scroll上综合性的DeFi协议,自9月18日开始其陆续在Tokensoft、Bounce、Coresky等平台开启DAPP通证的销售,并分别在短期内完成售罄。吸引了来自韩国、CIS、土耳其等70多个国家的5万多名认证用户,反响热烈, Pencil…

VMware搭建DVWA靶场

目录 1.安装phpstudy 2.搭建DVWA 本次搭建基于VMware16的win7系统 1.安装phpstudy 下载windows版本:小皮面板-好用、安全、稳定的Linux服务器面板! 安装后先开启mysql再开启apache,遇到mysql启动不了的情况,最后重装了phpstud…

一窥AI大模型奥秘:技术前沿与产业应用双轮驱动

在科技日新月异的今天,人工智能(AI)正以前所未有的速度重塑着我们的生活与工作方式。其中,AI大模型作为技术的最前沿,不仅引领着技术体系的革新,更是产业实践与未来趋势的关键所在。 近期,有幸…

YOLOv8+注意力机制+PyQt5玉米病害检测系统完整资源集合

资源包含可视化的玉米病害检测系统,基于最新的YOLOv8注意力机制训练的玉米病害检测模型,和基于PyQt5制作的可视玉米病害系统,包含登陆页面和检测页面,该系统可自动检测和识别图片或视频当中出现的七类玉米病害:矮花叶病…

Linux防火墙-什么是防火墙

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 什么是防火墙 我们想象一下把每台服务器当成一个小区,我们去访问另外一个小区的朋友,我们需要经过什…

黑马头条day4 自媒体文章自动审核

阿里云内容安全调用 其实这个接口调用不是很难 但是需要花钱 就没买 我开了按量计费 但是还是不行 所以就没测试 于是尝试自己写返回成功值 效果不好 后来发现不如直接在函数里边取消调用文字和图片审核 这样更简单 远程调用与降级处理 这里有个bug调试了好久 第一个就是总…

Cannon-es.js物理引擎中物体动力控制的深度探索

本文目录 前言1、cannon-es给物体施加力1.1 前置代码1.2 效果1.3 给小球施加力1. applyForce效果 2. applyImpulse效果 3. applyLocalImpulse效果 4. applyTorque效果 区别总结 前言 在三维物理引擎的世界里,Cannon-ES以其轻量级和高效能著称,为开发者提…

使用docker形式部署prometheus+alertmanager+钉钉告警

一、拉取所需要的镜像 docker pull prom/node-exporter docker pull grafana/grafana docker pull prom/prometheus docker pull prom/alertmanager 其中 prom/node-exporter:用于收集主机系统信息和指标的 grafana/grafana:是一个用于可视化和分…