9月26日

1.虚函数与纯虚函数:
在类中定义函数时,在函数前加关键字 virtual ,允许在派生类中重写的方法。那么该函数就是虚函数。
纯虚函数:没有实现的方法,用于定义接口。
2.基类为什么需要虚析构函数:
确保删除派生类对象时,基类的析构函数也能被调用。
3.如何初始化const和static数据成员:
class MyClass {
public:
    const int value = 10; // 类内直接初始化
};
class MyClass {
public:
    static int count;
};

// 类外定义和初始化
int MyClass::count = 0;
4.指针和引用的区别:
1>    引用定义时标识符是&,而指针定义时的标识符是*
2>    定义引用时,必须进行初始化,而定义指针时可以不用初始化
3>    没有空引用,但是可以有空指针
4>    引用一旦指定目标后,就不能进行修改了,而指针后期可以修改指向
5>    引用的使用跟目标一致,而指针的使用需要使用 *运算符
6>    引用就是目标本身,而指针记录的是目标的起始地址
7>    没有多级引用,但是有多级指针
8>    引用不占内存空间,使用的是目标的空间,而指针需要占内存空间
9>    引用的大小跟目标的大小保持一致,而指针的大小全部统一一致都是8字节(64位操作系统)
10>    引用在进行偏移时,就是对目标进行的偏移(如 ref++), 而指针的偏移,就是偏移目标单位内存空间的大小
11>    没有引用数组,但是可以定义指针数组
5.new和malloc的区别:
构造函数和析构函数:

new 会自动调用对象的构造函数,而 malloc 不会。同样地,delete 会自动调用析构函数,而 free 不会。
类型安全:

new 是类型安全的,返回一个正确的指针类型,可以直接赋值给一个指针变量。
malloc 返回 void* 类型,需要显式类型转换。
表达式:

new 是一个运算符,可以与类型一起使用,如 new int。
malloc 是C标准库函数,需要指定分配的字节大小,如 malloc(sizeof(int))。
错误处理:

new 在内存分配失败时抛出 std::bad_alloc 异常(除非使用了 new (nothrow))。
malloc 在失败时返回 nullptr。
重载:

new 和 delete 运算符可以被重载,允许自定义类的内存分配和释放行为。
malloc 和 free 不能被重载,它们定义在全局命名空间。

6.内存泄漏的产生与避免:
产生原因
忘记释放内存:

使用 new 或 malloc 分配了内存,但忘记使用 delete 或 free 释放。
异常导致:

在抛出异常的过程中,如果对象是通过 new 分配的,而没有相应的 delete,那么在异常处理中可能会忘记释放。
野指针:

指针指向已释放的内存,但指针本身未被设为 nullptr,后续可能错误地使用该指针。
循环引用:

在使用智能指针时,如果存在循环引用,智能指针可能无法正确释放内存。

如何避免内存泄漏

使用智能指针:

C++11引入了智能指针,如 std::unique_ptr 和 std::shared_ptr,它们可以自动管理内存。

确保异常安全:

在可能抛出异常的代码块中,确保所有动态分配的内存在异常抛出前被释放。

7.c++的内存分区
栈,堆,全局\静态存储区,常量存储区,代码段,线程局部分区,C++11引入的内存分区

8.说说你常用的设计模式及其应用场景:


9.常用的数据结构有哪些,时间复杂度和空间复杂度如何使用
数组,链表,栈,队列,哈希表,二叉树,堆

时间复杂度:

描述算法随着输入规模增长,执行时间的增长趋势。
常用大O表示法,如 O(1), O(log n), O(n), O(n log n), O(2^n) 等。
空间复杂度:

描述算法随着输入规模增长,所需存储空间的增长趋势。
同样使用大O表示法。
分析算法:在设计算法时,分析算法的时间和空间复杂度,以选择最优解。
优化性能:通过优化算法来降低时间复杂度,或使用更少的空间来降低空间复杂度。

10.描述Qt下Tcp通信的整个流程
包含必要的头文件:

创建QTcpServer:

监听端口:

处理新的连接:

接受连接:

客户端连接服务器:

等待连接成功:

数据传输:

处理数据:

关闭连接:

错误处理:

资源清理:

11.如何使用c++模拟Qt信号和槽
步骤1: 定义信号
首先,定义一个信号,它是一个可以存储和触发回调函数的类。
步骤2: 定义槽
槽是响应信号的函数。你可以定义任何符合信号期望的函数签名的函数或lambda表达式。
步骤3: 连接信号和槽
创建信号和槽的实例,并将槽连接到信号。
12.Qt中的智能指针的特点和用途
指针的特点和用途:
1. QScopedPointer
特点:
自动删除指向的对象。
保证对象的单一所有权。
不能被空值初始化。
用途:
当你需要确保一个对象在作用域结束时被自动删除时使用。
2. QSharedPointer
特点:
使用引用计数机制管理对象的生命周期。
可以被多个指针共享。
当最后一个引用被删除时,对象会被自动删除。
线程安全。
用途:
当需要多个对象共享同一个动态分配的对象时使用。
3. QWeakPointer
特点:
与QSharedPointer配合使用,不增加引用计数。
可以安全地从拥有QSharedPointer的对象中获取弱引用。
当指向的对象被删除时,QWeakPointer会被自动清空。
用途:
用于解决循环引用问题,避免内存泄漏。
4. QPointer
特点:
继承自QObject的类的QObject指针。
自动删除指向的对象,当对象被删除时,指针会被自动设为nullptr。
用途:
当你想要自动管理QObject派生类的生命周期,并且希望在对象被销毁时自动将指针设为nullptr。

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

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

相关文章

找不到MSVCR100.dll怎么办,解决MSVCR100.dll丢失的六种方法

在计算机的日常使用中,我们可能会遇到各种各样的问题,其中之一就是MSVCR100.dll文件丢失。这个文件是Microsoft Visual C 2010的一个组件,如果丢失,可能会导致某些程序无法正常运行。那么,如何解决这个问题呢&#xff…

记一次Windows状态栏不显示问题

文章目录 🪟解决方案☁️单次处理☁️有效处理 🪟现象🪟尝试的操作⭐END🌟跋🌟交流方式 🪟解决方案 ☁️单次处理 重启explorer.exe 命令行操作 注意,使用命令行操作的时候,出现…

[嵌入式] 3588测试镜头推流拉流步骤

1. RK驱动下载 识别不出来设备,成砖了之后,在插上电源之前,按住boot键,再上电。 2. 在嵌入式设备中,执行命令,rtsp_server rtsp_server -I 1 -d /dev/video22 -w 640 -h 480 推流,用vlc拉流…

linux信号 | 学习信号三步走 | 全解析信号的产生方式

前言:本节内容是信号, 主要讲解的是信号的产生。信号的产生是我们学习信号的第二个阶段。 我们已经学习过第一个阶段——信号的概念与预备知识(没有学过的友友可以查看我的前一篇文章)。 以及我们还没有学习信号的第三个阶段——信…

【理解 Java 中的 for 循环】

理解 Java 中的 for 循环 for 循环是 Java 中用于迭代的常用控制结构,它可以帮助我们重复执行某段代码,直到满足特定条件。本文将介绍 for 循环的基本语法、执行流程、注意事项及一些练习。 基本语法 for 循环的基本语法如下: for (循环变…

你知道吗?制造手机芯片的关键竟然是一台“打印机”?

在我们每天离不开的智能手机里,藏着一颗小小的“心脏”——芯片。它虽小,却拥有着强大的计算能力,能够让我们随时随地与世界保持连接。你可能想象不到,制造这些精密芯片的关键设备,竟然与我们日常使用的打印机有着惊人…

PD快充是如何诱骗取电的

PD诱骗取电原理,主要指的是在使用USB Power Delivery(USB PD)协议的场景中,通过一种特殊设计的芯片来模拟受电设备(如移动设备、充电宝等)支持特定功率等级的过程。通常情况下,当一个支持PD协议的充电器连接到设备时…

2024年研究生数学建模“华为杯”E题——肘部法则、k-means聚类、目标检测(python)、ARIMA、逻辑回归、混淆矩阵(附:目标检测代码)

文章目录 一、情况介绍二、思路情况二、代码展示三、感受 一、情况介绍 前几天也是参加了研究生数学建模竞赛(也就是华为杯),也是和本校的两个数学学院的朋友在网上组的队伍。昨天(9.25)通宵干完论文(一条…

C语言编译和链接详解(通俗易懂,深入本质)

我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program)。在 Windows 下,可执行程序的后缀有.exe和.com(其中.exe比较常见);在类 UNIX 系统(Linux、Mac OS 等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判…

MyBatis<foreach>标签的用法与实践

foreach标签简介 实践 demo1 简单的一个批量更新&#xff0c;这里传入了一个List类型的集合作为参数&#xff0c;拼接到 in 的后面 &#xff0c;来实现一个简单的批量更新 <update id"updateVislxble" parameterType"java.util.List">update model…

基于LFSR和NFSR的流密码算法Grain v1

基于LFSR和NFSR的流密码算法Grain v1 0x0简介 Grain算法是由瑞典的 Hell,Johansson 和瑞士的 Meier 共同设计的一种面向硬件实现的流密码算法。Grain算法面向硬件实现&#xff0c;具有运行速度快、安全性高、灵活输出密钥流等优点&#xff0c;并已成为eSTREAM(欧洲流密码算法…

(done) 使用泰勒展开证明欧拉公式

问问神奇的 GPT&#xff0c;how to prove euler formula? 一个答案如下&#xff1a;

C++_实现日期类

✨✨ 欢迎大家来到小伞的大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 小伞的主页&#xff1a;xiaosan_blog 1.日期类的实现接口(date.h) 对于多次调用的函数&#xff0c;我们会实现在头文件…

Vulhub TheEther_1.0.1靶机详解

项目地址 https://download.vulnhub.com/theether/theEther_1.0.1.zip实验过程 将下载好的靶机导入到VMware中&#xff0c;设置网络模式为NAT模式&#xff0c;然后开启靶机虚拟机 使用nmap进行主机发现&#xff0c;获取靶机IP地址 nmap 192.168.47.1-254根据对比可知theEthe…

【Linux 报错】vim 保存文件时出现 E45: ‘readonly‘ option is set (add ! to override)

一、错误原因 该错误表明当前你尝试保存的是一个 只读文件&#xff0c;该文件权限设置为只读&#xff0c;具有只读的标识 系统为了防止你意外修改该只读文件&#xff0c;因此会阻止对只读文件的保存&#xff08;他怕你修改了你还保存&#xff0c;破坏了只读属性&#xff09; …

实景三维夯实数字乡村孪生底座

随着数字乡村建设的不断推进&#xff0c;实景三维技术在乡村规划、管理、服务等方面发挥着越来越重要的作用。本文将探讨实景三维技术如何夯实数字乡村的孪生底座&#xff0c;为乡村的可持续发展提供强有力的支撑。 一、数字乡村建设的背景 数字乡村建设是推动乡村全面振兴、…

python实现石头,剪刀,布(turtle库简易版)

三角形为剪刀&#xff0c;红色为石头&#xff0c;圆形为布&#xff08;玩家点击&#xff09; 右边为电脑 运行截图&#xff1a; 写的比较简易&#xff0c;包括鼠标的点击&#xff08;主要想应付一下老师的作业&#xff0c;临时写的&#xff09;&#xff0c;很多都有点偏差&am…

51单片机-AD(模拟信号转数字信号)-实验(电压采集)

介绍AD AD转换&#xff08;Analog to Digital Conversion&#xff0c;模数转换&#xff09;是将连续的模拟信号转换为离散的数字信号的过程。这个过程在各种电子设备中都非常重要&#xff0c;特别是在涉及传感器、音频信号、视频信号等需要进行数字化处理的领域。 个人理解&a…

菱形继承、菱形虚拟继承、菱形继承中多态问题、菱形虚拟继承中多态问题

菱形继承以及菱形继承中的多态问题 一、对象模型&#xff08;一&#xff09;菱形继承 & 菱形虚拟继承&#xff08;一&#xff09;菱形继承中多态 & 菱形虚拟继承中多态 二、总结 本文主要叙述菱形继承、菱形虚拟继承、菱形继承中多态、菱形虚拟继承中多态&#xff0c;这…

超全攻略,教你验证第三方电子合同平台的真伪

不了解电子合同不用担心&#xff0c;通过本篇文章&#xff0c;您可以深入了解电子合同以及第三方平台有效性。 如何辨别第三方电子合同平台的真伪&#xff0c;可以从合法性、技术安全、平台、功能、服务等几个方面入手&#xff1a; 1.合法性方面&#xff1a; 资质认证&#…