2024.9.26C++作业

ops/2024/10/19 3:58:40/

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

1.虚函数在基类中声明,使用virtual关键字修饰成员函数,并且允许在派生类中重写。
2.在运行时,允许基类指针或者引用调用这个函数时,根据实际对象类型调用派生类,实现动态绑定,实现多态性。
3.纯虚函数是没有在基类中实现的函数,只声明,不实现,无法直接实例化,必须在派生类中提供具体的实现。
4.编译器维持一张表支持虚函数,记录每个对象所对应的虚函数实现,在运行时提供函数调用。


2. 基类为什么需要虚析构函数?
在多态过程中,如果基类指针要删除一个派生类对象,如果没有定义虚析构函数,那么只会调用基类的析构函数,派生类的虚构函数不会被调用,可能造成内存泄漏,

3. 如何初始化 const 和 static 数据成员?
1.const成员必须通过构造函数的初始化列表进行初始化,不能在构造函数内赋值。
2.static成员变量属于一个类,而不是某个对象,因此必须在类外进行初始化。

4. 引用和指针的区别
1.引用使用&,指针使用*
2.指针储存的是对象地址,访问时通过解引用访问实际值,引用是对象别名,在编译时替换成对象本身。
3.引用必须在声明时进行初始化,而指针可以在声明后稍后赋值。
4.引用不可以被重新赋值,指针可以指向不同的对象。
5.指针可以指向nullptr为空,引用必须使用指向合法对象。
6.指针占用内存,引用不占用。
7.指针可以有多级指针,引用只有一级。
8.引用多用于参数传递减少拷贝开销,指针用于动态内存管理和可能为nullptr的对象。

5. new 和 malloc 的区别
1.malloc是c标准库函数,用于分配指定字节空间,返回void*指针指向该空间。new是c++y运算符,直接返回所需类型指针,避免了强制转换。
2.new在调用时会调用构造函数初始化对象,而malloc不会。
3.new分配失败抛出异常,malloc返回值为NULL
4.new分配的内存需要使用delete释放,调用析构函数。malloc使用free释放。
6.new适用于c++对象创建,而malloc适用于手动管理对象数据。

6. 内存泄漏是怎么产生的,如何避免
内存泄漏是程序动态分配的内存未即使释放,导致内存无法再次使用和时候导致的。
避免方法:使用析构函数进行释放。手动追踪内存的分配和释放。

7. C++ 的内存分区
1.栈区:储存局部变量和函数调用相关栈帧。
2.堆区:用于动态内存分配,需要手动释放。
3.全局/静态区:储存全局变量和静态变量,程序启动时分配,结束时释放。
4.常量区:如字符串常量。
5.代码区:存放可执行代码。

8. 设计模式及应用场景
1.单例模式:确保一个类只有一个实例,提供全局访问,比如数据库的连接池管理。
2.工厂模式:用于创建对象的封装,适用于对象创建逻辑复杂且需要根据输入类型创建不同对象的场景。

9. 常用的数据结构及时间、空间复杂度
1.数组,访问(O1),插入删除(On)
2.链表,访问(On),插入删除(O1)
3.栈,基于数组或者链表实现,出入栈时间复杂度为(O1)
4.队列,基于数组或者链表实现,出入队列的时间复杂度为(O1)
5.哈希表:查找,插入,删除的时间复杂度为(O1)


http://www.ppmy.cn/ops/118697.html

相关文章

Ubuntu 镜像替换为阿里云镜像:简化你的下载体验

Ubuntu,作为一款广受欢迎的Linux发行版,以其稳定性和易用性著称。但你是否曾因为下载速度慢而感到沮丧?现在,你可以通过将Ubuntu的默认下载源替换为阿里云镜像来解决这个问题。本文将指导你如何完成这一过程。 为什么选择阿里云镜…

计算机毕业设计 基于 Hadoop平台的岗位推荐系统 SpringBoot+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

ENV | WSL迁移Linux系统到非系统盘(完整实操版)

1. 操作步骤 1.1 确认要导出的Linux系统是否存在&#xff08;可跳过&#xff09; # 终端命令 # 查看通过WSL安装的Linux系统列表 wsl -l1.2 导出Linux系统为tar包 # 终端命令 # 格式&#xff08;过&#xff09; wsl --export <Distribution Name> <File Name> #…

NLP任务之预测最后一个词

目录 1.加载预训练模型 2 从本地加载数据集 3.数据集处理 4.下游任务模型 5.测试代码 6.训练代码 7.保存训练好的模型 8. 加载 保存的模型 1.加载预训练模型 #加载预训练模型 from transformers import AutoTokenizer#预训练模型&#xff1a;distilgpt2 #use_fast…

【有啥问啥】具身智能(Embodied AI):人工智能的新前沿

具身智能&#xff08;Embodied AI&#xff09;&#xff1a;人工智能的新前沿 引言 在人工智能&#xff08;AI&#xff09;的进程中&#xff0c;具身智能&#xff08;Embodied AI&#xff09;正逐渐成为研究与应用的焦点。具身智能不仅关注于机器的计算能力&#xff0c;更强调…

安卓app开发系列之-性能优化

✨ 关于我 ✨ &#x1f468;‍&#x1f4bb; Hi there! 我是 [Jamson]&#xff0c;一名热爱编程与技术的狂热者&#xff0c;致力于前后端的全栈独立软件系统开发。通过不断学习和实践&#xff0c;我希望将知识分享给更多的朋友们&#xff0c;和大家一起成长。 &#x1f4a1; &…

主数据管理的误区有哪些?

在实施主数据管理&#xff08;MDM&#xff09;项目时&#xff0c;企业可能会遇到一些常见的误区。了解并避免这些误区对于确保项目的成功至关重要。以下是一些常见的主数据管理误区及其简要说明&#xff1a; 主数据管理误区 同时维护多套主数据编码体系&#xff1a;为同一个实…

力扣面试150 寻找峰值 二分

Problem: 162. 寻找峰值 &#x1f468;‍&#x1f3eb; 参考图解 class Solution {public int findPeakElement(int[] nums) {int l 0; // 初始化左边界&#xff0c;表示数组的起始位置int r nums.length - 1; // 初始化右边界&#xff0c;表示数组的结束位置// 当左边界和…