C++——视频问题总结

1、C和C++的区别

CC++
面向过程对象
注重程序的实现逻辑程序的整体设计
内容C语言采用了一种有序的编程方法——结构化编程:将一个大型程序分解为一个个小型的,易于编写的模块,所有模块有序调动,形成了一个程序的完整的运行链C++将问题分解为各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题中的行为,更注重程序的整体设计,方便程序的后期维护、优化和管理,让一个功能尽可能的通用。应对需求的变化,本意是处理大型复杂系统的设计和实现
优点性价比比面向对象,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素易维护易复用易扩展,由于面向对象有封装、继承、多态的特性,可以设计出低耦合的系统,使系统更加灵活,更加易于维护
缺点没有面向对象易维护、易复用、易扩展因为类调用时需要实例化,开销比较,比较消耗资源,性价比比面向过程低

2、C++面向对象有哪些特征

封装封装是指将对象的属性和方法结合成一个独立的系统单位,隐藏对象的内部细节,只保留有限的对外接口,这样可以保护数据不受外部随意访问或修改,同时简化编程接口,提高代码的可维护性和安全性
继承继承允许一个(子类)继承另一个类(父类)的属性和方法,这样可以实现代码的重用,提高开发效率,在C++中,继承分为公有继承、保护继承和私有继承,分别定义了基类成员在派生类中的访问权限
多态多态指在一般类中定义的属性或行为被特殊类继承后,可以具有不同的数据类型或表现出不同的行为,这样可以在不改变程序结构的情况下,使用相同的方式调用不同对象的方法,C++中支持两种多态性,编译期多态和运行期多态。编译器多态通过函数重载实现,运行期多态通过虚函数实现

3、堆和栈的区别

存放变量类型全局变量局部变量
存放内容需要动态分配的数据结构,如字符串、对象和动态数组函数调用时的临时变量、函数返回地址等信息,主要用于内存的临时分配
内存区域不连续,(链表存储空闲内存地址)连续
管理方式程序员自行负责,使用后必须手动释放按照”先进后出“的原则进行管理
申请效率
生长方向向高地址扩展数据结构向低地址扩展数据结构
空间大小空间较大空间较小
申请大小动态申请释放,没有特定限制操作系统指定大小,被操作系统限制
分配方式当关键字malloc或new执行时,才会被分配空间,只能动态分配当函数被执行时,形参和函数内部的局部变量会一起被创建出来,可以动态和静态分配
访问方式只能用指针读取数据可以使用变量名或指针读取数据
存在周期存在时间较长,需要人为清理和回收存在时间取决于存在作用域,当执行程序离开时,该所在的作用域将被回收
稳定性不稳定,容易造成内存泄露稳定

4、怎么确定new和malloc的成功和失败

mallocnew
成功如果成功,返回void*,需要手动强转为需要的类型返回对象类型的指针,类型和对象严格匹配,无需类型转换
失败返回NULL指针抛出bad_alloc异常(程序异常错误提示框)

使用new申请内存后,一定要delete,并将指针赋空,否则会造成内存空间的浪费

5、C语言中已经有了malloc,为什么C++中要加入new,不直接使用malloc

malloc和free使用时需要显式的指定申请空间的大小,而new和delete不需要

malloc申请后的类型需要强转为所需要的类型,new申请后的返回值不需要强转

6、malloc和new的区别

相同点

都在堆区中分配空间
都需要手动释放
返回的都是堆区的首地址,需要用指针来接收

不同点

malloc—freenew—delete
初始化malloc不能在申请空间的同时进行初始化

new先调用operator new()函数,申请足够的内存空间

然后调用类型的析构函数,初始化成员对象,最后返回自定义的类型的指针

delete先调用析构函数,最后调用operator delete()函数释放空间

类成员单纯的申请空间,不会调用构造、析构函数申请结构体、类空间时,自动调用构造、析构函数
属性是C中的库函数,需要引入对应的头文件是C++中的关键字,使用时只需要编译器的支持就可以
用法

#include<malloc.h>

int* p1=(int*)malloc(sizeof(int));

int* p2=new int;
参数传递的是申请空间的大小,需要指定申请空间的大小

传递的是类型,可以自动计算大小

当new出来的是数组时,delete时用delete[]变量名的方式进行释放,[]无需写数组长度

返回类型返回void*,需要强转为所需要的类型直接申请对象类型的指针,不需要强转
分配失败返回NULL指针抛出bad_alloc异常
重载是函数,不可以重载,但可以重写是操作符,可以重载
内存区域

操作符从自由存储区为对象分配内存空间

自由存储区不仅可以是堆,还可以是静态存储区

7、深拷贝和浅拷贝的区别、优缺点

浅拷贝深拷贝
拷贝对象与被拷贝对象是否在同一地址创建一个新对象时,把对象的初始属性都复制一份,若是存在引用类型,则拷贝的是其内存地址,当它的值发生改变时,另一个的值也会受到改变是将对象从内存中完全拷贝出来,并且重新开辟出一片空间来进行存放,当其中一个值发生改变时并不会影响另一个的值,两者互不影响
优点在简单的情况下,浅拷贝与深拷贝相同,且无内存浪费问题在有指针存在的情况下,可解决浅拷贝的双重释放等问题,在改变新的数组(对象)时,不会改变原数组(对象)
缺点多个对象可能指向同一块内存地址,析构时可能造成内存重复释放等问题在不涉及指针等的情况下,单纯的访问数据会造成内存浪费

 8、继承下定义子类对象,构造,析构的顺序及原因

10、什么是多态

多态的概念

相同的行为方式可能导致了不同的行为结果,同一行语句展现了多种表现形态
父类的指针可以指向任何继承于该父类的子类对象,且父类指针具有子类对象的形态
多种子类具有多种形态,由父类统一管理
父类指针具有多种形态

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件著作权申请教程(超详细)(2024新版)软著申请

目录 一、注册账号与实名登记 二、材料准备 三、申请步骤 1.办理身份 2.软件申请信息 3.软件开发信息 4.软件功能与特点 5.填报完成 一、注册账号与实名登记 首先我们需要在官网里面注册一个账号&#xff0c;并且完成实名认证&#xff0c;一般是注册【个人】的身份。中…

HTTPS详解:加密机制、工作流程、CA证书与中间人攻击防护

文章目录 1. 前言1.1. 什么是HTTPS1.2. 什么是加密1.3. 常见的加密方式① 对称加密② 非对称加密 1.4. 数据摘要&#xff08;数据指纹&#xff09;① 实例&#xff1a;软件分发中的数据摘要 1.5.1 一个小问题 2. HTTPS 工作流程探究2.1. 方案1 - 只使用对称加密2.2. 方案2 - 只…

机器学习基础04

目录 1.朴素贝叶斯-分类 1.1贝叶斯分类理论 1.2条件概率 1.3全概率公式 1.4贝叶斯推断 1.5朴素贝叶斯推断 1.6拉普拉斯平滑系数 1.7API 2.决策树-分类 2.1决策树 2.2基于信息增益的决策树建立 2.2.1信息熵 2.2.2信息增益 2.2.3信息增益决策树建立步骤 2.3基于基…

【Python · PyTorch】卷积神经网络(基础概念)

【Python PyTorch】卷积神经网络 CNN&#xff08;基础概念&#xff09; 0. 生物学相似性1. 概念1.1 定义1.2 优势1.2.1 权重共享1.2.2 局部连接1.2.3 层次结构 1.3 结构1.4 数据预处理1.4.1 标签编码① One-Hot编码 / 独热编码② Word Embedding / 词嵌入 1.4.2 归一化① Min-…

ospf排错学习

排错步骤是 1、查看ospf的router-id是否相同 2、错误配置ospf发布路由 //典型错误 3、错误的ospf区域号 4、错误的被动接口设置 //接口设置为被动接口&#xff0c;不学习了 排错思路&#xff08;思科命令&#xff09…

AR眼镜方案_AR智能眼镜阵列/衍射光波导显示方案

在当今AR智能眼镜的发展中&#xff0c;显示和光学组件成为了技术攻坚的主要领域。由于这些组件的高制造难度和成本&#xff0c;其光学显示模块在整个设备的成本中约占40%。 采用光波导技术的AR眼镜显示方案&#xff0c;核心结构通常由光机、波导和耦合器组成。光机内的微型显示…

【Linux】多线程(中)

目录 一、线程互斥 1.1 互斥概念 1.2 互斥量mutex 1.3 互斥量相关API &#xff08;1&#xff09;初始化互斥量 &#xff08;2&#xff09;销毁互斥量 &#xff08;3&#xff09;互斥量加锁和解锁 1.4 互斥量原理 1.5 重入和线程安全 二、死锁 2.1 概念 2.2 造成死锁…

【优选算法 — 滑动窗口】水果成篮 找到字符串中所有字母异位词

水果成篮 水果成篮 题目描述 因为只有两个篮子&#xff0c;每个篮子装的水果种类相同&#xff0c;如果从 0 开始摘&#xff0c;则只能摘 0 和 1 两个种类 &#xff1b; 因为当我们在两个果篮都装有水果的情况下&#xff0c;如果再走到下一颗果树&#xff0c;果树的水果种类…

Ubuntu 的 ROS 操作系统 turtlebot3 gazebo仿真

引言 TurtleBot3 Gazebo仿真环境是一个非常强大的工具&#xff0c;能够帮助开发者在虚拟环境中测试和验证机器人算法。 Gazebo是一个开源的3D机器人仿真平台&#xff0c;它能支持物理引擎&#xff0c;允许机器人在虚拟环境中模拟和测试。结合ROS&#xff0c;它能提供一个完整的…

供应链管理、一件代发系统功能及源码分享 PHP+Mysql

随着电商行业的不断发展&#xff0c;传统的库存管理模式已经逐渐无法满足市场需求。越来越多的企业选择“一件代发”模式&#xff0c;即商家不需要自己储备商品库存&#xff0c;而是将订单直接转给供应商&#xff0c;由供应商直接进行发货。这种方式极大地降低了企业的运营成本…

5G CPE:为什么活动会场与商铺的网络成为最新选择

在快节奏的现代社会中&#xff0c;无论是举办一场盛大的活动还是经营一家繁忙的商铺&#xff0c;稳定的网络连接都是不可或缺的基石。然而&#xff0c;面对复杂的布线难题或高昂的商业宽带费用&#xff0c;许多场所往往陷入两难境地。幸运的是&#xff0c;5G CPE&#xff08;Cu…

python怎么安装numpy

1、在python官网https://pypi.python.org/pypi/numpy中找到安装的python版本对应的numpy版本。 例如&#xff1a; python版本是&#xff1a; 下载的对应numpy版本是&#xff1a; 2、将numpy下载到python的安装目录下的scripts文件夹中&#xff1b; 3、然后在cmd中执行以下命…

Qt主线程把数据发给子线程,主线程会阻塞吗

演示&#xff1a; #include <QCoreApplication> #include <QThread> #include <QObject> #include <QDebug>// 子线程类 class Worker : public QObject {Q_OBJECT public slots:void processData(int data) {qDebug() << "Processing dat…

OSG开发笔记(三十一):OSG中LOD层次细节模型介绍和使用

​若该文为原创文章&#xff0c;未经允许不得转载 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/143697554 各位读者&#xff0c;知识无穷而人力有穷&#xff0c;要么改需求&#xff0c;要么找专业人士&#xff0c;要么自己研究 长沙红胖子Qt…

在Linux上部署(MySQL Redis Elasticsearch等)各类软件

实战章节&#xff1a;在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面&#xff0c;我们学习了许多的Linux命令和高级技巧&#xff0c;这些知识点比较零散&#xff0c;同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用&#xff0c…

thinkphp6 --数据库操作 增删改查

一、数据库连接配置 如果是本地测试&#xff0c;它会优先读取 .env 配置&#xff0c;然后再读取 database.php 的配置&#xff1b; 如果禁用了 .env 配置&#xff0c;则会读取数据库连接的默认配置&#xff1a; # .env文件&#xff0c;部署服务器&#xff0c;请禁用我 我们可以…

探索 HTML 和 CSS 实现的 3D旋转相册

效果演示 这段HTML与CSS代码创建了一个包含10张卡片的3D旋转效果&#xff0c;每张卡片都有自己的边框颜色和图片。通过CSS的3D变换和动画&#xff0c;实现了一个动态的旋转展示效果 HTML <div class"wrapper"><div class"inner" style"-…

什么岗位需要学习 OpenGL ES ?说说 3.X 的新特性

什么是 OpenGL ES OpenGL ES 是一种为嵌入式系统和移动设备设计的3D图形API(应用程序编程接口)。它是标准 OpenGL 3D 图形库的一个子集,专门为资源受限的环境(如手机、平板电脑、游戏机和其他便携式设备)进行了优化。 由于其在移动设备上的广泛适用性,OpenGL ES是学习移…

【GPTs】Get Simpsonized:一键变身趣味辛普森角色

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;Get Simpsonized主要功能适用场景优点缺点使用方式 &#x1f4af;小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; 指令保护和安全规则&…

JS 实现游戏流畅移动与按键立即响应

AWSD 按键移动 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.box1 {width: 400px;height: 400px;background: yellowgreen;margin: 0 auto;position: relative;}.box2 {width: 50px;height:…