C++:笔试题

news2024/12/27 1:38:25

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

虚函数是类中的一个成员函数,使用关键字virtual在函数名前声明。

        虚函数主要目的是允许子类重写父类中的同名函数,从而实现多态性,并且子函数重写的是虚函数表中的函数。

        当通过父类的指针或引用调用虚函数时,会通过虚函数指针在虚函数表中遍历要调用的函数,若有则调用,若无则调用父类函数。

        纯虚函数:是虚函数的一种特殊形式,它在声明时没有函数体,在函数声明的末尾使用= 0。

包含纯虚函数的类被称为抽象类,抽象类不能直接实例化对象,只能作为其他类的父类。

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

        这是多态的问题,当基类指针指向派生类对象时,如果基类的析构函数不是虚的,那么在删除基类指针时,只会调用基类的析构函数,而不会调用派生类的析构函数。这会导致派生类中分配的资源没有被正确释放,造成内存泄漏。

        如果基类的析构函数是虚的,那么在删除基类指针时,会先调用派生类的析构函数,然后调用基类的析构函数。这样可以确保派生类和基类中的资源都被正确释放。

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

        当const修饰类中成员变量时,在构造函数的初始化列表中,必须对其进行初始化工作。

const修饰普通变量,必须初始化变量。

        当static修饰类中成员变量时,在类内声明,在类外定义及初始。static修饰类的成员变量是类的一部分,不属于任何单个对象。

4.指针和引用的区别?

指针

①使用星号(*)来定义和使用指针。

②指针是一个变量,占用内存空间,它存储了另一个变量的内存地址。

③指针可以重新赋值以指向不同的对象。

④有空指针

⑤可以多级指针

引用

①使用&来定义引用。

②引用是一个别名,它为已存在的变量提供了另一个名字,不占用内存空间,与引用目标位于同一内存空间。

③引用在定义时必须被初始化,并且不能重新绑定到另一个对象。

④没有空引用

⑤没有多级引用

5.new和malloc的区别?

①malloc申请空间时,没有单个和连续空间的区别,而new申请时分单个和连续空间的操作

②malloc属于c标准库的函数,属于函数调用,而new\C++中的关键字。

③malloc申请空间不可以进行初始化,new申请空间时可以给空间进行初始化。

④malloc申请空间需要计算申请空间大小,以字节为单位申请空间,new申请空间时自动计算申请空间大小,且以数据类型为单位申请空间。

⑤使用malloc分配的内存不会调用构造函数。释放时使用free,也不会调用析构函数。

使用new分配的对象,其构造函数会被调用。当使用delete释放对象时,其析构函数也会被调用。 

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

①使用newmalloc分配的内存没有用deletefree来释放。

解决:每次使用new分配内存后,确保在不再需要内存时使用delete来释放。

②多个对象相互的引用,导致引用过深

解决:避免成员变量之间的循环引用。

③指针没有被正确初始化或指向被释放的内存,导致野指针。

解决:智能指针

④在继承中,父类析构函数中没有采用虚函数,导致父类指针指向子类堆区空间中的对象时,释放父类指针时,子类空间无法释放,导致内存泄漏

7.c++的内存分区?

全局/静态存储区:全局变量和静态变量存储在这里。在C语言中,全局变量又分为初始化的和未初始化的,分别放在数据段(data)和BSS段(bss),但在C++中没有这个区分,它们共同占用同一块内存区。这个区域的内存在程序的生命周期内几乎都是全局的 。

栈区:用于存储函数调用时的局部变量、函数参数以及返回地址。当函数调用完成后,分配给这个函数的栈空间会被释放。例如,函数内的局部变量就存放在栈区 。

堆区:用于动态内存分配。当使用new(C++)或者malloc(C)分配内存时,分配的内存块就位于堆区。程序员需要手动释放这些内存,否则可能导致内存泄漏 。

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

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

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

相关文章

七、添加攻击音效

一、添加动画事件 1、在动画事件中添加音效 2、添加音频组件 3、代码 public void PlayAttackSound() {AudioSource1.PlayOneShot(AudioClip1, SoundValue);//PlayOneShot播放一个音频剪辑(AudioClip)一次 }

Oracle 日志文件多路复用

多路复用 PRODCDB 数据库的所有日志组中的 redo log 文件,存放目录: /u01/app/oracle/oradata/MREDO 1.创建目录 mkdir -p /u01/app/oracle/oradata/MREDO 2.查看日志文件路径 select group#,member from v$logfile; 3.增加日志组文件 alter database a…

ElementUI el-tree 树组件 增加辅助线

需求 项目需求给elementUI的el-tree添加辅助线&#xff0c;并且不能使用其他插件&#xff0c;没办法只能该样式了。 效果 代码 html <template><div><el-scrollbar class"long-content"><el-tree node-key"id":data"deptTre…

《程序猿之Redis缓存实战 · 有序集合类型》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

OpenGL ES 索引缓冲区(4)

OpenGL ES 索引缓冲区(4) 简述 本节会介绍索引缓冲区&#xff0c;索引缓冲区和顶点缓冲区类似&#xff0c;也是显存上的一段内存&#xff0c;只不过上面的数据用处不同&#xff0c;索引缓冲区故名思义里面的数据是用于索引&#xff0c;主要作用是用于复用顶点缓冲区里的数据。…

Kd-tree介绍和使用

GeoHash原理介绍以及在redis中的应用-CSDN博客 这边文章中介绍了GeoHash编码原理以及它的一个应用——利用GeoHash编码可以建立一个索引&#xff0c;从而实现快速的空间搜索。今天&#xff0c;我们介绍一个常见的数据结构Kd-Tree&#xff0c;利用它也可以快速实现多位数据的搜索…

调用智谱AI,面试小助手Flask简单示例

文章目录 1.接入AI获取API密钥Python代码 2.小助手的实现流程3.Flask应用示例Python文件.pyindex.html运行Flask应用地址栏输入 http://localhost:5000/ 1.接入AI 获取API密钥 在智谱AI的官方网站上注册&#xff0c;右上角点击API密钥&#xff0c;新建并复制一个 API Key&…

掌握未来:产品经理学习AI大模型的重要性解析

前言 在AI大模型时代&#xff0c;技术的迅猛进步正在重塑各行各业的面貌。作为产品经理&#xff0c;我们不仅要紧跟时代步伐&#xff0c;更要深入探索与运用这一前沿技术。学习大模型等AI技术&#xff0c;不仅是为了理解其背后的工作原理和应用潜力&#xff0c;更是为了将智能…

天选思路怎能不会!小波变换+CNN完美融合,最新idea发了CV顶会!

今天给大家推荐一个涨点发顶会的好方向&#xff1a;小波变换CNN。这俩热点的结合可以轻松实现“11&#xff1e;2”的效果。 这是因为&#xff0c;一方面小波变换可以作为预处理步骤&#xff0c;提取出关键的局部特征&#xff0c;加速CNN收敛并提升性能&#xff1b;另一方面&am…

配置树莓派打开SSH服务

在树莓派终端中查看IP 在终端中输入命令来查看IP地址。最常用的命令是&#xff1a;hostname -I注意&#xff0c;这里的参数I是大写的&#xff0c;它表示查看本机上所有配置的IP地址&#xff08;包括IPv4和IPv6&#xff0c;如果有的话&#xff09;。如果你只需要查看IPv4地址&am…

Linux:磁盘管理

一、静态分区管理 静态的分区方法不可以动态的增加或减少分区的容量。 1、磁盘分区-fdisk 该命令是用于查看磁盘分区情况&#xff0c;和分区管理的命令 命令格式&#xff1a;fdisk [选项] 设备文件名常用命令&#xff1a; -h&#xff1a;查看分区信息 fdisk系统常用命令&…

19、网络安全合规复盘

数据来源&#xff1a;5.网络安全合规复盘_哔哩哔哩_bilibili

山大电力研发费用率远弱同行,先分红上亿再补流9000万?

《港湾商业观察》施子夫 8月9日&#xff0c;证监会网站披露深交所已向山东山大电力技术股份有限公司&#xff08;以下简称&#xff0c;山大电力&#xff09;发出第三轮审核问询函。据悉&#xff0c;2023年6月&#xff0c;山大电力递表深交所&#xff0c;保荐机构为兴业证券。 …

Linux中find命令详解

记录linux中find命令的详细用法。 文章目录 find命令简介基本语法常用选项-name-iname-type-size-mtime,-atime,-ctime-perm-user-group-delete-exec-printand or find --help find命令简介 find 是一个搜索目录树以查找一个文件或一组文件的程序。它遍历目录树并报告与用户规…

VMware虚拟机NAT模式配置

1、宿主机 2、宿主机网络适配器 VMnet8 ①要与虚拟机在同一网段 ②不能和宿主机同一网段 3、VMware 4、虚拟机

短视频剪辑工具有哪些?推荐4个简单好用的工具

短视频如今充斥着我们的生活&#xff0c;刷短视频已经成了很多人的生活必备。所以掌握短视频剪辑技能是一件很重要的事情&#xff0c;能够为视频创作者带来很多的流量。如果想要学习剪辑的话&#xff0c;可以先从选择一款合适的剪辑工具开始&#xff0c;这几款功能丰富的软件&a…

Google ads投广中的这些问题,看你中了没

谷歌广告是一个强大的工具&#xff0c;可以显著提升外贸独立站的流量和销售。但是&#xff0c;要想充分发挥其潜力&#xff0c;需要深入了解其工作原理&#xff0c;并掌握如何设定预算、选择关键词、创建广告文案等技巧。以下是一些在谷歌广告投放过程中网友遇到的一些问题及其…

基于ESP8266—AT指令连接阿里云+MQTT透传数据(1)

在阿里云创建MQTT产品的过程涉及几个关键步骤,主要包括注册阿里云账号、实名认证、开通MQTT服务实例、创建产品与设备等。以下是详细的步骤说明: 一、准备工作 访问阿里云官网,点击注册按钮,填写相关信息(如账号、密码、手机号等)完成注册。注册完成后,需要对账号进行实…

Solaris11.4配置远程桌面登录

Solaris11.4配置远程桌面登录 一. 版本信息 1. 内核版本信息 rootsolaris11:~# uname -a SunOS solaris11 5.11 11.4.27.82.1 sun4v sparc sun4v rootsolaris11:~# rootsolaris11:~# rootsolaris11:~# cat /etc/releaseOracle Solaris 11.4 SPARCCopyright (c) 1983, 2020, …

【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和常规型数字格式的区别

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和…