C++重要语法一图概括(复习用)

news2024/11/27 16:47:38

0.思维导图

1.传值返回和引用返回

1.1传值返回

传值返回所返回的是当前对象的拷⻉

1.2引用返回

引⽤返回返回的是对象本身,

返回对象是⼀个局部变量,出了作⽤域便会 被销毁,

所以不可使⽤引⽤返回

出了作⽤域,引⽤对象还在,才可以引⽤返回 所以说如果⼀个变量⽣命周期只在最⼩的⼀ 个作⽤域中,那么最好是传值返回

2.匿名对象

3.动态内存管理

new的底层大概是这样的:

operator new+malloc的封装+构造函数

operator delete +析构函数

4.模板

5.构造函数&析构函数&拷贝构造函数

构造函数和析构函数属于六⼤默认成员函数,在使⽤此类实例化⼀个对象时会并进⾏相关操作时会⾃动调⽤

六⼤默认成员函数:

C98:默认构造函数,拷⻉构造函数,析构函数,拷⻉赋值运算符

C11:移动构造函数,移动赋值运算符

//如果我们不写构造/析构函数(默认成员函数),编译器也会⾃动⽣成

//编译器会如何⽣成默认构造函数

//对于内置类型成员变量,编译器会给予它们内存中存在的任意值 //对于⾃定义类型成员变量,编译器会调⽤其✦默认构造函数✦

//默认构造函数=不传参就可以调⽤的函数(⽆参,全缺省,我们没写编译器⾃动⽣成的,三者仅可 存在⼀个)

6.拷贝构造函数

//如果没有管理资源,⼀般不⽤写拷⻉构造,默认⽣成的拷⻉构造就可以了,就不如上⾯的Date

//如果是⾃定义成员,内置类型成员没有指向资源,也类似默认⽣成的拷⻉构造(浅拷⻉)就可以

//⼀般情况下,不需要写析构函数同时也不要写拷⻉构造函数

//如果内部有相关管理资源的指针,需要显示写析构函数,通常需要显示写拷贝构造完成深拷⻉

7.拷贝赋值运算符

8.继承

//base类中protected成员在派⽣类中可访问,但不可在int main函数中直接访问

//base类中private成员在派⽣类中不可⻅

9.组合

组合就是⼀个类中有另外⼀个类

10.多态

不同的对象去做相同的事情得到不同的结果

多态条件 1.虚函数重写 2.base类指针或者引⽤调⽤函数

//析构函数是否建议设计成虚函数

//析构函数⼀定设计成析构函数,只有这样,派⽣类才可以构成 重写(针对不同类特殊化处理)

//派⽣类的重写函数可加virtual也可以不加

11.纯虚函数

12.仿函数

//ps:operator()只是仿函数的标志, ⽽真正的"仿函数名" 是"class Compare"中的"Compare"

13.右值引用

14.移动构造

ps:右值引用涉及移动构造

15.λ-calculus

16.包装器

17.异常

18.智能指针

 智能指针的作用:cpp中,凡是遇到动态资源管理,尽可能地交给智能指针
智能指针都在一个<memory>
总而言之就是构造函数保存指针资源,析构函数释放资源,以达到自动内存管理的作用
C++语法称其为RAII:资源获得立即初始化
通过对象的生命周期来保存资源

unique_ptr:禁止拷贝
shared_ptr/shared_array:引用计数的方式支持拷贝,
weaked_ptr:不同于上述指针,不支持直接管理资源 shared_ptr的循环引用会引起内存泄漏,配合此指针可以很好地解决此问题

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

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

相关文章

嵌入式面试八股文(四)·同步和互斥、同步和异步、同步阻塞和同步非阻塞、异步阻塞和异步非阻塞的详细分析

目录 1. 同步和互斥 1.1 同步 1.2 互斥 1.3 总结 2. 同步和异步 2.1 同步 2.2 异步 3. 阻塞和非阻塞 3.1 阻塞 3.2 非阻塞 4. 同步阻塞和同步非阻塞 4.1 同步阻塞 4.2 同步非阻塞 4.3 同步阻塞和同步非阻塞的区别 5. 异步阻塞和异步非阻塞 5.1 …

基于微信小程序的学生宿舍管理系统设计与实现

宿舍管理 | 学生宿舍 | 学生宿舍管理 | 学生宿舍管理小程序 博主介绍&#xff1a;✌️大家好&#xff01;我是Coder-coco&#xff0c;一名专注以理论为基础、实战为主的技术博主&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&a…

使用html2canvas将网页导出为图片

1. 安装html2canvas npm install html2canvas或者 pnpm install html2canvas2. 简单使用案例 ref&#xff1a;Vue 3 的 ref 用来引用 DOM 元素。我们通过 exportContent 引用需要导出的 DOM 元素。 html2canvas&#xff1a;html2canvas 库会将指定的 DOM 元素渲染为画布&…

C++发送邮件:如何稳定实现邮件发送功能?

C发送邮件安全性探讨&#xff01;C编程中发送邮件的技巧&#xff1f; 邮件发送功能是许多应用程序的重要组成部分&#xff0c;无论是用于通知用户&#xff0c;还是用于自动化报告。AokSend将探讨如何在C环境中稳定地实现邮件发送功能&#xff0c;确保邮件能够可靠地到达收件人…

深入解析:Redis与Nacos分布式锁在业务中的具体应用

时间&#xff1a;2024年08月22日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频地址&#xff1a;https://xima.tv/1_HBPYxC?_sonic0 希望大家帮个忙&#xff01;如果大家有工作机会&#xff0c;希望帮小蒋内推一下&#x…

传输协议在文件传输中面临哪些挑战

文件传输是指通过网络或互联网连接将文件从一台计算机复制或移到另一台计算机的过程。这样即可在本地和远程的不同用户和/或计算机之间共享、传输或发送文件&#xff1b;文件传输通常受通信协议约束&#xff0c;通信协议是一组规则&#xff0c;用来规定如何在网络中的计算机之间…

在Chatbox(桌面ai工具)中使用SiliconCloud

在Chatbox中使用SiliconCloud 一&#xff0c;前言 "随着人工智能技术的发展&#xff0c;AI已经成为我们日常生活和工作中的重要组成部分。Chatbox是其中一种流行的桌面AI工具&#xff0c;它可以帮助用户进行AI对话和AI绘画。SiliconCloud则是一个AI平台&#xff0c;它提…

vue,div实现拖动,并给新位置

鼠标方上去随意拖动到其它位置 <template><div style"margin: 50px;"><div class"dade draggable-div" mousedown"startDrag($event)" mouseup"stopDrag" mousemove"drag($event)"style"width: 200px…

【JavaEE初阶】TCP协议

&#x1f332;TCP协议的概念 TCP&#xff08;TransmissionControlProtocol 传输控制协议&#xff09;是一种面向连接的、可靠的、面向字节流&#xff0c;双全工的传输层通信协议。 这几个特点在我们前面写得TCP服务器和客户端的搭建中&#xff0c;代码能够直观的感受到&#…

13 跳转控制语句(break、continue、goto),循环的加强练习

目录 1 break 1.1 介绍 1.2 流程图 1.3 在循环中使用 break 1.4 注意事项 1.5 案例&#xff1a;判断质数 2 continue 2.1 介绍 2.2 流程图 2.3 在循环中使用 continue 2.4 案例&#xff1a;逢七过游戏 3 goto 语句 3.1 介绍 3.2 基本语法 3.3 流程图 3.4 基本使…

开学必备清单来啦!大学好物合集推荐!每一个都能帮你提升幸福感

随着开学季的到来&#xff0c;好多学生都在忙着准备各类学习与生活必需品&#xff0c;以迎接新的大学生活到来。以下是一些开学季必备的好物推荐&#xff0c;每一个都很实用&#xff0c;可以帮你提升学习和生活的幸福感&#xff01; 1、西圣电容笔 一句话推荐&#xff1a;公认…

Windows 11 24H2 终于允许多个应用程序同时使用摄像头

Windows 11&#xff08;以及任何旧版本的 Windows&#xff09;均不允许多个摄像头应用程序访问网络摄像头硬件&#xff0c;除非使用第三方应用程序创建虚拟摄像头设置。这种情况将在未来发布的 Windows 11 版本 24H2 中得到改变&#xff0c;该版本将增加一项可选功能&#xff0…

nginx 添加第三方nginx_upstream_check_module 模块实现健康状态检测

安装插件 下载 链接&#xff1a;https://pan.baidu.com/s/1iTPEmu_hCHYhDyaVDDTsVg?pwdvaw8 提取码&#xff1a;vaw8 安装依赖 yum install pcre pcre-devel yum -y install make gcc-c gcc编译安装 $ nginx -V #此处省略了很多模块&#xff0c;只是为了看清而已 ... co…

轻松掌握LLM三角原则:简化大模型应用开发流程的理解指南

不少朋友偷偷问我&#xff1a;“什么是LLM的三角原则&#xff1f;”今天就给大家仔细讲讲构建LLM应用的三角原则。这套原则其实不复杂&#xff0c;由“31”(一范式三原则)个基础组成&#xff0c;适合任何团队来实践。 说到以LLM为核心的应用&#xff0c;有不少人以为是高大上的…

【考研数学】二战能不看课,直接刷1000题或者李林880吗?

二战数学&#xff0c;刷题的时间肯定要大于看课的时间&#xff0c;同时听课要注意&#xff1a; 1、针对问题听课&#xff0c;听课的时候你要带有目的性&#xff0c;如果毫无目的&#xff0c;那么这节课你能获得的东西就十分优先&#xff0c;你的精力也不会集中&#xff08;提高…

JS SyntaxError: Unexpected token 报错解决

JS SyntaxError: Unexpected token 报错解决 在JavaScript开发中&#xff0c;SyntaxError: Unexpected token 是一个常见的错误&#xff0c;它通常表示JavaScript引擎在解析代码时遇到了意料之外的符号。这个错误可能由多种原因引起&#xff0c;包括拼写错误、缺少括号、引号不…

MySQ分库分表与MyCat安装配置

目录 介绍 拆分策略 垂直拆分 1. 垂直分库 2. 垂直分表 水平拆分 1. 水平分库‘ 2. 水平分表 实现技术 MyCat概述 安装 概念介绍 MyCat入门 需求 环境准备 分片配置 启动服务 连接测试 执行SQL语句测试 MyCat配置 1. schema.xml 1. schema标签 2. dat…

观测云产品更新 | 异常追踪、数据保存策略、BPF 日志、管理优化等

观测云更新 Breaking Changes OpenAPI&#xff1a;【事件】未恢复事件数据源从 UE 变更为 E 。 新增功能 管理&#xff1a;新增 Client Token 统一管理入口&#xff0c;用户使用公网 DataWay 接入 RUM 应用时&#xff0c;可更换系统默认生成的 Token&#xff0c;使用自定义…

重生奇迹 MU热血与激情的战斗岁月

这里&#xff0c;是一个充满神秘与奇幻色彩的大陆。古老的城堡诉说着往昔的荣耀&#xff0c;广袤的荒野等待着勇敢者的探索。长春的勇士们&#xff0c;准备好迎接挑战了吗&#xff1f; 绚丽的画面&#xff0c;每一帧都如同精美的画卷。从神秘的魔法森林到雄伟的龙巢&#xff0…

看看镭速传输中如何处理Mysql超时配置问题的

Mysql作为一个广泛使用的开源关系型数据库管理系统&#xff0c;以快速、可靠、易于使用、开源的特色闻名&#xff0c;使用 MySQL 来存储和管理数据&#xff0c;已经广泛应用于各个领域、各类大小型应用中。 使用 MySQL 来存储和管理数据的应用中&#xff0c;与数据库之间的连接…