2024.9.26C++作业

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.rhkb.cn/news/435003.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据新视界 --大数据大厂之数据清洗工具 OpenRefine 实战:清理与转换数据

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

尚硅谷vue3+TypeScript笔记大全

源码及视频:通过百度网盘分享的文件:尚硅谷vue3 链接:https://pan.baidu.com/s/19zVM5Xsr1UP7tZ4D0mhVqA?pwdgmta 提取码:gmta 1. Vue3简介 2020年9月18日,Vue.js发布版3.0版本,代号:One Piec…

Qualcomm AI Hub模型优化1: Whisper-Base-En导出及问题解决

1 从Qualcomm AI Hub Module中选择Whisper-Base-En模块部署 1.1 进入module虚拟环境 python3 -m venv qai_hub_models_env && source qai_hub_models_env/bin/activate1.2 使用pip安装高通音频转录包 pip install "qai_hub_models[whisper_base_en]" 1.3…

人工智能对话系统/AI助理/PC/公众号/h5/小程序

>>>系统简述: GPTCMS基于TP6UniappVUE3开发,已集成文心一言、灵犀星火、ChatGLM(清华旗下)、讯飞星火(即将)、api2d、意间AI、ChatGPT、GPT3.5、GPT4、Stable Diffusion、MidJourney-V4、MidJour…

基于Python大数据可视化的民族服饰数据分析系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

第十届蓝桥杯嵌入式省赛程序设计题解析(基于HAL库)

一.题目分析 (1).题目 (2).题目分析 1.参考配置界面 注意上限和下限的调整,上限值必须大于下限值,低于下限LD2会闪烁,低于上限LD1会闪烁 2.按键功能分析 B1:显示界面和设置界面相互切…

Java IO 和 NIO

在 Java 编程中,输入输出(IO)是不可或缺的部分,随着技术的发展,Java 的 IO 系统也经历了显著的变化。本文将深入探讨 Java IO 和 NIO 的历史、优缺点以及适用场景。 1. Java IO 的历史 Java IO 包(java.i…

Solidity智能合约中的异常处理(error、require 和 assert)

Solidity 中的三种抛出异常方法:error、require 和 assert 在 Solidity 开发中,异常处理是确保智能合约安全性和正确性的关键步骤。Solidity 提供了三种主要方法来抛出异常:error、require 和 assert。本文将详细介绍这三种方法的用途、实现方…

nginx+keepalived健康检查案例详解(解决nginx出现故障却不能快速切换到备份服务器的问题)

文章目录 简介配置过程前置环境请看创建健康检查脚本结果测试 简介 在我们通过nginxkeepalived实现高可用后,会发现nginx出现故障的时候keepalived并不会将虚拟ip切换到备份服务器上其原理就是nginx和keepalived是两个独立的服务,Nginx的故障状态不会触…

使用Docker-Compose部署SpringBoot项目的案例

Docker-Compose是Docker官方的一个开源项目,主要用于实现对Docker容器集群的快速编排和管理。该项目由Python编写,通过调用Docker服务提供的API来管理容器。只要所操作的平台支持Docker API,就可以利用Docker-Compose进行编排管理。Docker-Co…

【微服务即时通讯系统】——brpc远程过程调用、百度开源的RPC框架、brpc的介绍、brpc的安装、brpc使用和功能测试

文章目录 brpc1. brpc的介绍1.1 rpc的介绍1.2 rpc的原理1.3 grpc和brpc 2. brpc的安装3. brpc使用3.1 brpc接口介绍 4. brpc使用测试4.1 brpc同步和异步调用 brpc 1. brpc的介绍 1.1 rpc的介绍 RPC(Remote Procedure Call)远程过程调用,是一…

X86下一文带你构建Apollo9.0运行环境(基于Ubuntu20.04避坑版)

X86下一文带你构建Apollo9.0运行环境基于Ubuntu20.04避坑版 前言准备安装基础软件1.安装Docker19.03安装Nvidia驱动安装配置Nvidia container toolkit 下载Apollo源码(笔者下载的是releases下9.0.0版本,大家可以参考)编译Apollo9.0下载资源包…

如何使用GitHub Desktop管理GitLab库

不管是新手还是老手,Github Desktop都是在苹果系统和Windows系统上管理与创建项目的不错的方式,GitHub Desktop都能够让在GitHub上的工作流更为简单快捷。 注意,以下步骤只支持原版的GitHub Desktop 第一步 从这下载GitHub Desktop打开你的G…

【hot100-java】【柱状图中最大的矩形】

R9-栈篇 面积最大矩形的高度一定是 heights 中的元素 简单解释,就是说,最大高度必然是heights中的一个元素,我们假设是h,然后我们基于h,左右拓展,尽量拓展到h越来越高(符合单调栈)&a…

手机改IP地址怎么弄?全面解析与操作指南

在当今数字化时代,IP地址作为设备在网络中的唯一标识,其重要性不言而喻。有时候,出于隐私保护、网络访问需求或其他特定原因,我们可能需要更改手机的IP地址。然而,对于大多数普通用户来说,如何操作可能还是…

Redis 篇-深入了解 Redis 中的 RESP 通信协议与内存回收(过期 key 处理、内存淘汰策略)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Redis 通信协议 - RESP 协议 2.0 Redis 内存回收 2.1 Redis 内存回收 - 过期 key 处理 2.1.1 Redis 是如何知道一个 Key 是否过期呢? 2.1.2 是不是 TT…

Linux基础(三):安装CentOS7(系统安装+桥接联网+换源)

1.分区设置 由于使用 GPT 的关系, 因此根本无须考虑主/延伸/逻辑分区的差异。CentOS 默认使用 LVM 的方式来管理你的文件系统。使用GPT进行分区: 开机管理程序( boot loader) 使用CentOS 7.x默认的grub2软件。 2.各种分区格式 …

DataLight(V1.4.5) 版本更新,新增 Ranger、Solr

DataLight(V1.4.5) 版本更新,新增 Ranger、Solr DataLight 迎来了重大的版本更新,现已发布 V1.4.5 版本。本次更新对平台进行了较多的功能拓展和优化,新增了对 Ranger 和 Solr 服务组件的支持,同时对多项已…

Oracle 配置恢复目录catalog

一.介绍 Oracle中使用RMAN备份的数据我们分为两类 RMAN知识库数据库的数据块 Oracle默认把 RMAN知识库 放在目标数据库的控制文件中,在以后进行恢复的时候 我们要先读知识库的信息然后才能恢复。 但这样就产生了一个问题,知识库放在了控制文件上&#xf…

【C++】set与map

目录 一、预备知识: 1、关联式容器: 2、键值对: 3、树形结构的关联式容器: 二、set: 1、set的介绍: 2、使用: 1、set的构造: 2、set的各种功能: 3、multiset 三…