多态的遗留问题以及C++中杂项,C++面试题

news2024/11/16 21:25:11

在这里插入图片描述

在这里插入图片描述

C++面试题

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

虚函数:在类的继承中,基类中的函数前加virtual声明的函数就是虚函数。

虚函数实现了运行的多态,同一函数调用在不同对象中表现出不同的行为

纯虚函数:在基类中声明但没有实现的虚函数。在声明时末尾加上 =0 表示纯虚函数

包含纯虚函数的类称为抽象类,不能实例化对象。派生类必须实例化抽象类中的所有虚函数才能实例化。

虚函数:可以有实现,允许在派生类中重写,支持运行时多态。

纯虚函数:没有实现,强制派生类必须实现,基类因此成为抽象类。

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

析构函数是用来释放资源空间的。如果没有析构函数可能会造成内存泄漏及其他资源管理问题。

在派生类中有重写虚函数,当用基类指针定义派生类对象后,释放基类指针的派生类对象时,如果基类中的析构函数不是虚函数,会导致派生类中基类的空间不能被释放,可能会导致内存泄漏。

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

const修饰的数据初始化后不能被修改,必须在构造函数中使用初始化列表进行初始化

static 数据成员属于类,而不是类的对象。所有对象共享同一个 static 数据成员。在类内部声明,但 在类外进行定义和初始化。

4.指针和引用的区别

指针是一个变量,其值为另一个变量的地址。可以通过指针间接访问和操作该变量。

引用是某个变量的别名,它为已有变量提供了一个新的名字。引用一旦初始化后就不能再指向其他变量。

使用 * 来声明指针,并使用 & 获取变量的地址。

使用 & 来声明引用,初始化时必须绑定到一个已有的变量。

可以是 nullptr,未初始化的指针是一个野指针。

不能为 nullptr,引用在创建时必须初始化。

可以改变指针指向的地址,可以随时将指针指向不同的变量。

不能重新赋值。引用一旦绑定到一个变量,就不能再指向其他变量。

指针在内存中占用固定的大小。

5.new和malloc的区别

newmalloc 都用于动态内存分配,

**new** 是 C++ 的运算符,在使用时会调用构造函数。返回所分配内存的指针,并自动进行类型转换。分配内存后,可以初始化对象(调用构造函数)。使用 delete 运算符释放内存,同时调用析构函数。使用 new[] 来分配数组内存,并在释放时使用 delete[]

malloc:是 C 语言中的标准库函数,属于 C 语言的一部分,用于动态内存分配。返回 void* 类型的指针,使用时需要手动转换为所需类型。不会初始化分配的内存,返回的内存内容是未定义的。使用 free 函数释放内存,不会调用析构函数。使用 malloc 也可以分配数组内存,释放时直接free。

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

内存泄漏是在释放动态申请的内存时没有正确释放

在new或者malloc空间后没有调用相应的delete和free进行释放

同一指针用来申请空间前没有释放原有的空间

避免方法:通过使用智能指针、遵循 RAII 原则、利用 STL 容器、以及使用静态分析工具,可以有效地避免和检测内存泄漏问题。

7.C++的内存分区

通常分为:栈区,堆区,全局区,代码区,未初始化数据区

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

常用的数据结构包括数组、链表、栈、队列、哈希表、树和堆等

数组访问时间复杂度为 O(1),但插入和删除操作在开头或中间的时间复杂度为 O(n),适用于随机访问:需要快速访问元素(如查找、修改)时。

链表插入和删除操作更高效(O(1)),但访问时间复杂度为 O(n),适用于频繁的插入和删除:如实现队列、栈中。

栈和队列操作时间复杂度均为 O(1),栈适用于存储函数的调用状态(如递归)及返回地址,队列适用于如操作系统中的进程调度。

哈希表使用哈希函数实现快速查找、插入和删除,平均时间复杂度为 O(1),但最坏情况下可能达到 O(n)。适用于快速查找、插入和删除

树结构在查找、插入和删除操作时间复杂度为 O(log n)。树适合表示层次关系,而哈希表适合快速查找。适用于如文件系统、组织结构等

堆插入和删除操作的时间复杂度为 O(log n),查找最大或最小值的时间复杂度为 O(1),适用于优先队列实现,用于调度和事件处理。

空间复杂度都为:O(n)

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

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

相关文章

树莓派4B+UBUNTU20.04+静态ip+ssh配置

树莓派4B+UBUNTU20.04+静态ip+ssh配置 1.烧录Ubuntu镜像1.1选择pi 4b1.2选择ubuntu server (服务器版,无桌面)20.041.3选择sd卡1.4 点击右下角 NEXT ,编辑设置,输入密码,wifi选CN, 开启ssh1.5 烧录,依次点击“是”,等待完成2 烧录完成后装入树莓派,上电,等待系统完成配…

软件无线电3-微相E316和HackRF实现FM调制解调

前面介绍了基于Matlab、矢量信号器和HackRF One实现射频下的FM调制解调,今天分享的内容是用微相E316替代矢量信号器完成发射工作。注意本文仅用于科研和学习,私自搭建电台属于违法行为。 1.概述 微相E316和HackRF One实现FM调制解调测试框图如1所示&am…

离散化 ---( 求区间和)

什么是离散化? 离散化是将连续的数值范围映射到有限的、离散的数值集合的过程。在许多情况下,数据可能会存在多个重复值或范围较大的连续值。为了简化处理,尤其是处理区间查询和增量问题时,我们可以将这些值转换为一组有限的、唯一…

【重学 MySQL】四十、SQL 语句执行过程

【重学 MySQL】四十、SQL 语句执行过程 select 语句的完整结构select 语句执行顺序SQL 语句执行原理 select 语句的完整结构 SELECT 语句是 SQL(Structured Query Language)中用于从数据库表中检索数据的核心语句。一个完整的 SELECT 语句结构可以包括多…

Linux系统部署Mysql8.x修改密码并且设置远程连接

配置yum仓库配置yum仓库 # 更新密钥 rpm import https:repo.mysql.com/RPM-GPG-KEY- mysql-2023 # 安装Mysql8.x版本 yum库 rpm -Uvh https:dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm 由于MySQL并不在CentOS的官方仓库中,所以我们通过上述rp…

跟李沐学AI:自注意力和位置编码

自注意力 自注意力机制(Self-Attention Mechanism),也被称为内部注意力(Intra-attention)或并行注意力(Parallel Attention),是一种在深度学习模型中用于处理序列数据的机制。它允许…

新版pycharm如何导入自定义环境

我们新的版本的pycharm的ui更改了,但是我不会导入新的环境了 我们先点击右上角的add interpreter 然后点击添加本地编译器 先导入这个bat文件 再点击load 我们就可以选择我们需要的环境了

解决毕业论文难题!推荐7款AI自动生成论文工具网站

在当今学术研究和写作领域,AI论文写作工具的出现极大地提高了写作效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿,还能进行内容优化、查重和排版等操作。以下是七款值得推荐的AI自动生成论文工具网站,特别推荐千笔-AIPassPaper。…

arthas简单应用

背景说明 项目上某个接口响应时间过长,需要查看方法耗时情况进行优化 安装配置 访问下载页进行下载:下载 | arthas 调整文件位置进行解压缩 - 查看arthas帮助命令(非必须,官网文档更详细) C:\tools\arthas\4.0.1\b…

移动技术开发:HandlerAsyncTask

1 实验名称 Handler&AsyncTask 2 实验目的 掌握使用Handler消息传递机制和AsyncTask处理后台线程周期性的改变Activity中界面控件的属性 3 实验源代码 布局文件代码&#xff1a; &#xff08;1&#xff09;HandlerTest <?xml version"1.0" encoding&quo…

《深度学习》—— ResNet 残差神经网络

文章目录 一、什么是ResNet&#xff1f;二、残差结构&#xff08;Residual Structure&#xff09;三、Batch Normalization&#xff08;BN----批归一化&#xff09; 一、什么是ResNet&#xff1f; ResNet 网络是在 2015年 由微软实验室中的何凯明等几位大神提出&#xff0c;斩获…

文新智能体开发:省钱有道,智慧选择,属于你的“省钱小诸葛”

开发灵感 在开发购物类智能体“省购小诸葛”时&#xff0c;我的灵感源自于对现代消费者购物行为的深刻洞察与未来科技趋势的展望。想象一个时代&#xff0c;当信息的海洋变得浩瀚无垠&#xff0c;消费者在众多商品与促销活动中遨游&#xff0c;却往往感到迷茫与疲惫。这时&…

在CANoe/CANalyzer中Replay Block“一键发送”一个诊断/命令序列

案例背景&#xff1a; 在博文《在CANoeCANalyzer中“在线回放”CAN Log.asc/blf文件_canoe怎么回放blf文件-CSDN博客https://blog.csdn.net/qfmzhu/article/details/128954931》我们介绍了Replay Block模块的一些典型应用。 下面我们介绍如何使用Replay Block代替IG(Interact…

OJ在线评测系统 后端 使用代理模式编写测试类 并 实现核心业务判题流程

编写测试类(代理模式) 实现示例的代码沙箱 package com.dduo.dduoj.judge.codesandbox.impl;import com.dduo.dduoj.judge.codesandbox.CodeSandbox; import com.dduo.dduoj.judge.codesandbox.model.ExecuteCodeRequest; import com.dduo.dduoj.judge.codesandbox.model.Exec…

Linux 冯诺依曼体系结构与操作系统概念

目录 0.前言 1. 冯诺依曼体系结构概述 1.1 输入单元 1.2 中央处理单元&#xff08;CPU&#xff09; 1.3 输出单元 2. 冯诺依曼体系结构的关键特性 2.1 所有数据流向内存 2.2 数据流动示例&#xff1a;QQ聊天过程 3. 操作系统 3.1 概念 3.2 设计操作系统的目的 3.3 操作系统的“…

华为源NAT技术与目的NAT技术

1&#xff09;源NAT对报文源地址进行转换&#xff0c;分为NAT NO-PAT&#xff0c;NAPT,EASY-IP,三元组NAT&#xff1b; &#xff08;1&#xff09;NAT NO-PAT原理&#xff1a; no-port address translation:非端口地址转换&#xff1a;只转换地址&#xff0c;不转换端口&…

【C++位图】构建灵活的空间效率工具

目录 位图位图的基本概念如何用位图表示数据位图的基本操作setresettest 封装位图的设计 总结 在计算机科学中&#xff0c;位图&#xff08;Bitmap&#xff09;是一种高效的空间管理数据结构&#xff0c;广泛应用于各种场景&#xff0c;如集合操作、图像处理和资源管理。与传统…

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

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

word2vector理论

目录 1.理论 2.公式 3.SkipGram的优化 1.理论 2.公式 3.SkipGram的优化 CBOW的优化, CBOW是用上下文预测中心词. Hirarchical softmax帮助我们最快的找到最大的softmax, 通过建立一个霍夫曼树.

【数据结构】AVL树相关知识详细梳理

1. AVL树的概念 AVL的全称是Adelson-Velsky-Landis&#xff0c;其名称来源于其发明者Adelson、Velsky和Landis&#xff0c; 是平衡二叉树搜索树。 它的出现是由于二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找…