当前位置: 首页 > news >正文

C++结尾

面试题

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

在定义函数时前面加virtual。虚函数是为了,父子类中只有一个该函数。如果在子类重写虚函数,那么用的就是子类重写的虚函数;如果子类没有重写虚函数,那么调用的是父类继承的虚函数;如果这个类定义了虚函数,那么在子孙类该函数也是虚函数,不需要加vartual。

纯虚函数是在虚函数头后加“ = 0”;包含纯虚函数的类称为抽象类,不能进行实例化。子类需要重写纯虚函数,不然也是抽象类

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

当基类的指针指向子类在堆区申请的空间时,申请空间先构造父类在构造子类。但delete父类指针时只能释放父类指针的作用域,不能完全释放子类空间,就会导致内存泄露。所以需要再定义析构函数前加virtual设置成虚析构函数。该类的子孙类也会是虚析构函数。

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

使用const必须对变量进行初始化,构造函数使用初始化列表来完成初始化;

static成员变量一般在类内声明,类外定义,没有给定初始值默认为0。

4.指针和引用的区别

1.指针使用*进行定义,引用使用&进行定义

2.引用没有多级引用,指针有多级指针

3.定义引用的时候必须初始化,定义指针的时候可以不初始化;

4.没有空引用,有空指针;

5.引用不能更改目标,指针在后面可以更改指向;

6.引用没有引用数组,指针有指针数组;

7.引用就是目标本身,指针是存储目标的首地址;

8.引用不占用内存空间,使用目标的内存空间,指针需要占用内存空间

9.使用引用是直接就可以使用,使用指针需要*运算符

10.引用偏移是目标本身的偏移,指针的偏移是目标内存空间的偏移

5.new和malloc的区别

1.malloc的函数调用需要开辟内存空间,new的关键字,不需要开辟函数内存空间;

2.malloc申请空间没有单个和连续的区分,new申请有单个和连续空间的区分

3.malloc申请空间要手动计算空间大小,new的系统自动计算大小

4.malloc申请空间以字节为单位,new申请空间以数据类型为单位

5.malloc申请的空间是void *类型,需要是要进行强转,new申请的什么类型返回的就是什么类型的指针

6.malloc申请空间不能初始化,new申请空间可以进行初始化

7.new申请空间自动调用该类的构造函数,malloc不会

6.内存泄露怎么产生的?怎么避免

当父类指针指向子类申请的空间,在delete父类指针时,只能释放父类指针作用域的空间,不能释放剩余的子类空间,就会导致内存泄露。所以需要在父类的析构函数前加virtual设置成虚析构函数。

7.C++的内存分区

分为堆区:动态分配内存区域,由new和delete操作。栈区:已经初始化的局部变量;静态区:未初始化的局部变量和全局变量

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

常用的有数组:时间复杂度:访问(O(1));插入/删除(O(n));空间复杂度(O(n))

链表:时间复杂度:访问(O(n));插入/删除(O(1))(位置已经知道);空间复杂度(O(n))

栈:时间复杂度:入栈/出栈(O(1));空间复杂度(O(n))

队列:时间复杂度:入队/出队(O(1));空间复杂度(O(n))

类:

思维导图

 

相关文章:

  • 随记——机器学习
  • 如何一个月速通——2024年网络工程师,软考老鸟备考经验分享!
  • Android 通过自定义注解实现Activity间跳转时登录路由的自动拦截
  • Qt_文件操作
  • 了解独享IP的概念及其独特优势
  • 微信小程序如何使用自定义的字体
  • 解决macOS MySQL安装后不能远程访问的问题
  • golang雪花算法实现64位的ID
  • 无人机侦测:频谱无线电侦测设备技术详解
  • OSPFv3协议几类LSA介绍
  • redis序列化数据时,如何包含clsss类型信息?
  • 多线程计算π
  • 力扣9.25
  • 51单片机如何判断浮点数nan
  • QT 如何判断电脑已安装某个软件
  • 「译」Node.js Streams 基础
  • 【EOS】Cleos基础
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Git初体验
  • Python socket服务器端、客户端传送信息
  • Python学习之路16-使用API
  • Redux系列x:源码分析
  • V4L2视频输入框架概述
  • 分类模型——Logistics Regression
  • - 概述 - 《设计模式(极简c++版)》
  • 关于 Cirru Editor 存储格式
  • 聊聊directory traversal attack
  • 聊一聊前端的监控
  • 山寨一个 Promise
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • Linux权限管理(week1_day5)--技术流ken
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​2020 年大前端技术趋势解读
  • ​第20课 在Android Native开发中加入新的C++类
  • ​力扣解法汇总946-验证栈序列
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #QT 笔记一
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (2)leetcode 234.回文链表 141.环形链表
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (转)原始图像数据和PDF中的图像数据
  • (转)重识new
  • .CSS-hover 的解释
  • .gitignore文件设置了忽略但不生效
  • .NET Project Open Day(2011.11.13)
  • .NET 的程序集加载上下文
  • .NET+WPF 桌面快速启动工具 GeekDesk
  • .Net接口调试与案例
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • @ModelAttribute使用详解