C++系列之入门基础知识

news2024/11/28 2:28:16

在这里插入图片描述

💗 💗 博客:小怡同学
💗 💗 个人简介:编程小萌新
💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞

命名空间

常见域的种类

常见的域的种类有:全局域,局部域,命名空间域,类域
其中命名空间域需要指定访问命名空间中的变量或者直接展开命名空间域才能访问(展开命名空间域暴露在全局中)//好比命名空间域是个围墙需要访问变量才能看见,展开命名空间好比把墙拆除所有变量暴露在全局之中但这样容易发生变量命名冲突

命名空间的定义

关键字:namespace
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

命名空间使用

命名空间中可以定义变量/函数/自定义类型 命名空间还可以嵌套

在这里插入图片描述

命名空间使用的三种方式

加命名空间名称及作用域限定符

在这里插入图片描述

使用using namespace 命名空间名称引入

在这里插入图片描述

using 命名空间名::变量(将命名空间某个变量引入)

在这里插入图片描述

C++的输入和输出

#include using namespace std
//std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中

在这里插入图片描述
在这里插入图片描述

缺省参数

缺省参数概念

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该 形参的缺省值,否则使用指定的实参。

在这里插入图片描述
在这里插入图片描述

缺省参数分类

半缺省参数

// 半缺省参数必须从右往左依次来给出,不能间隔着给
在这里插入图片描述
全缺省参数
在这里插入图片描述

缺省参数的注意事项

1.缺省参数不能在声明与定义中同时出现 //因为担心声明与定义不统一 //声明中给缺省值,定义中不用给缺省值 ,预处理头文件展开,当编译时查看代码,当声明与函数调用处统一则往下进行

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.C语言不支持(编译器不支持)
3.缺省值必须是常量或者全局变量

函数重载

函数重载概念

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数 的形参列表(参数个数 或 类型 或
类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。

函数重载代码实现

1.参数类类型不同
2.参数个数不同
3.参数类型顺序不同
//返回值不同不构成重载

在这里插入图片描述

c++支持重载而,为什么c语言不支持重载

首先,我们需要明白在c/c++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接
预处理时头文件会展开,编译时每个文件遍历各自文件的代码,链接时在符号表寻找地址,然后链接在一起。
我的理解是重载成功,必不可少的两个因素是
一是重复的函数名在编译时会报错 因为在c语言中,相同的函数在编译时名字相同,无法判断
但是在c++中,在编译阶段,用巧妙的方法使得相同函数名分开

在这里插入图片描述

二是链接时需要把函数地址和对应的函数链接在一起,(相当于声明是承若,而在链接阶段就是实现承若)

假设链接器看到a.o调用函数,但是没有函数的地址,就会到b.o的符号表中找函数的地址,然后链接到一起。
那么链接时,面对函数,链接接器会使用哪个名字去找呢?这里每个编译器都有自己的函数名修饰规则。使得与对应函数赋予地址。
//当定义与声明同时存在时,不用通过链接 直接在编译阶段call(地址)就可以
//当声明与定义分别在各自文件时,编译阶段有声明存在就可通过

引用

引用的概念

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。相当于一个人有了两个或者多个名字,都是只同一个人
书写方式:类型& 引用变量名(对象名) = 引用实体;

引用特性

  1. 引用在定义时必须初始化
  2. 一个变量可以有多个引用
  3. 引用一旦引用一个实体,再不能引用其他实体

在这里插入图片描述在这里插入图片描述在这里插入图片描述

// c = d 这个步骤只是在赋值 没有引用别的变量
//定义的使用必须用变量来定义

引用的使用

常引用 //引用的使用权限只能缩小不能放大

在这里插入图片描述

在这里插入图片描述

做返回值

在这里插入图片描述

做参数

在这里插入图片描述

传值返回与引用返回的差别 传值返回出作用域之后生成一个临时变量 ,而引用返回出作用域不会生成一个临时变量,所以出作用域后,栈会自动销毁,比较不安全

在这里插入图片描述

//引用做返回类型,变量最好是静态,全局或者是malloc

引用的优点

//引用在语法层面不会开空间 因为以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低,所以引用在一定程度上效率会更高

引用与指针的区别

  1. 引用概念上定义一个变量的别名,指针存储一个变量地址。
  2. 引用在定义时必须初始化,指针没有要求
  3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型 实体
  4. 没有NULL引用,但有NULL指针
  5. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占 4个字节)
  6. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
  7. 有多级指针,但是没有多级引用
  8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
  9. 引用比指针使用起来相对更安全

内联函数

内联的定义

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧
的开销,内联函数提升程序运行的效率。

内联的特点

内联函数的特点是以空间换时间,在编译阶段函数体替换函数调用, 缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率。
使用建议:不能用于递归,频繁调用的函数,函数代码量大也不行 //编译器会自动挑选inline发来的请求 //如果调用10000次相同的函数
编译阶段call~
代表调用一次,为一个指令,代码量为50行为50个指令(因为实现同一个函数)所以指令共10000+50,而内敛函数直接展开所以是10000*50个指令
//inline不会调用函数所以在编译阶段不会call 宏优点:
1.增强代码的复用性。
2.提高性能。 缺点:
1.不方便调试宏。(因为预编译阶段进行了替换)
2.导致代码可读性差,可维护性差,容易误用。
3.没有类型安全的检查 。 //所以运用内联函数来换用宏,注意:内敛函数的声明与定义需要写在一起,因为内联函数直接展开,可以通过编译阶段但链接阶段找不到地址

auto关键字

auto的注意事项

//auto是一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。
1.auto与指针和引用结合起来使用 用auto和auto*没有任何区别 auto声明引用类型时则必须加&

在这里插入图片描述

2.在同一行定义多个变量 //且是相同变量
3. auto不能作为函数的参数
4.auto不能直接用来声明数组

基于范围的for循环

//用于循环数组

for循环后的括号由冒号前后分为两部分:第一部分是范围内用于迭代的变量, 第二部分则表示被迭代的范围。

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

快速构建springboot项目

需求:浏览器发送 /hello 请求,服务器接受请求并处理,响应 Hello World 字符串分析 构建 Spring Boot 项目,事实上建立的就是一个 Maven 项目 1.创建maven 工程 在 IDEA上新建一个空的jar类型 的 maven 工程 2.修改pom.xml 1.在…

【Tkinter.Floodgauge】当程序需要长时间运行,可以用这个组件显示进度【文末附源码地址】

文章目录 效果展示源码解析导包Floodgauge组件界面初始化创建窗口修改数值运行 源码地址 效果展示 我在使用tkinter进行界面化操作的时候,会遇到运行很慢的程序,比如:爬虫下载视频、压缩解压文件,这些操作会很耗时间。 Floodgau…

力扣 ~ JavaScript ~ 35. 搜索插入位置

《跃动青春》好可爱的女孩子的友谊哇 35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: …

redis(12)

1)添加地理位置坐标:已经添加的数据,无法再添加 geoadd key 经度 纬度 变量名字 geoadd china:city 121.47 31.23 shanghai 2)获取指定地区的坐标值: geopos key member(变量名字) geopos china:city shnaghai 3)获取到两个坐标之间的距离,后面是可选参…

95后的自述,文科女吃上IT饭了,历经5个月学习成功上岸软件测试......

想不到我一个女文科生也能吃上IT饭,真的是太香了!!! 程序员的待遇怎么这么好!(请大家原谅我没有见过市面的感叹,对于我这种刚上岗的新手而言,能够在厦门这个全国工资房价比最低的地方…

景区手绘图的配准、切图及上传

目录 1 增加一个项目 2 基础配置 3 获取自动上传需要的3个参数 3.1 生成切片上传验证码 3.2 按F5刷新页面 3.3 查看验证码以及其他2个参数 4 配准 5 切图 6 到迅达平台看一下切图效果 7 软件免费下载 这个免费客户端专用于迅达平台,对手绘图背景进行配准&…

java 调用 python 方法

目录 1.JPython 1.1 JPython介绍 1.2 JPython实践 2.使用Runtime.getRuntime()执行python脚本文件,推荐使用 一个项目可能需要用到人工智能算法,在java后端中需要调用python算法,这篇文章就简单介绍一下其中的两种java调用python方法。 …

一个简单的基于QT的图像浏览器

以前学习前端的时候,对于多张图片的布局一般使用瀑布流布局(CSS总结——瀑布流布局_css 瀑布流_黑白程序员的博客-CSDN博客),然后再通过懒加载(如何实现图片懒加载,预加载!! - 简书&…

AutoDL使用百度网盘来进行数据的交互

文章目录 1. 简介 2. 操作2.1. 设置密码2.1.1. 登录网盘 2.2. 访问网盘中的数据2.3. 将数据放入到网盘中 1. 简介 AutoDL上面其实是可以直接使用百度网盘、阿里云盘等公共网盘的,这样传资料的时候就不用通过Xshell慢悠悠的传输了,如果有百度网盘会员的话…

[MTK7621] dhcp.script 脚本分析

该脚本只要完成IP地址、DNS和路由设置。由udhcpc程序调用。调用的函数在下面两个文件中定义: . /lib/functions.sh:定义了一些基础操作,例如配置文件获取等 . /lib/netifd/netifd-proto.sh:定义了IP、DNS和路由的处理函数 在dhcp.…

关于Photoshop中的【Stable-Diffusion WEBUI】插件:Auto.Photoshop.SD.plugin

文章目录 (零)前言(一)PS的插件(1.1)安装(1.2)简评 (零)前言 本篇主要提到Photoshop中的Stable-Diffusion WEBUI插件,相对WEBUI并不算好用&#x…

MySQL 数据库面试题

TOC 1. MySQL 的内连接、左连接、右连接有有什么区别? inner join 内连接,在两张表进行连接查询时,只保留两张表中完全匹配的结果集。 left join 在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记…

STM32F401RET6 LQFP64 (Nucleo-F401RE) uart 打印输出

STM32F401RET6 LQFP64 (Nucleo-F401RE) uart 打印输出 1.STM32F401RET6 芯片情况 2.板子硬件 电源部分,开发板可利用JP5跳帽座子来选择使用USB供电或者使用管脚座子的外部Vin进行供电,无论是哪种供电,都需要经过U4的5V转成3.3V的LDO的再给S…

Simulink中如何获取所需变量对应的时间,并实时传输给其他模块

假设需要将时间信息传输给一个显示器模块,可以按照以下步骤进行操作: 在模型中添加“Clock”模块,将其输出与MATLAB函数“simulinktime”模块进行连接。 在模型中添加一个Scope模块,将其输入与Clock模块的输出进行连接。 运行模型,Scope模块将显示当前的仿真时间。 将Scop…

2023自动化测试选择什么工具或者框架好呢?

自动化测试的工具或者框架在市场上种类是比较繁多的。那么作为软件测试开发者应该怎么去选择呢?笔者觉得可以从测试需求、测试用例复杂度、技能水平和预算等方面去考虑。 Selenium 这是最常用的自动化测试工具之一,它可以模拟用户在不同的浏览器中进行操…

工厂人员定位系统源码,支持智能考勤、工时统计、行为检测、历史轨迹回放、人员管理、电子围栏功能

系统概述: 工厂人员定位系统,采用UWB定位技术,通过在厂区内部署一定数量的定位基站,以及为人员、车辆、物资佩戴标签卡的形式,实时获取人员精确位置,精度高达10cm。 工厂人员定位系统可实现物资/车辆实时定…

【Linux】】Linux权限的理解

一.Linux中的用户 Linux中分为两种用户,分别为: 1.root 用户,也叫超级用户,它的权限非常高,不受其他权限的约束,也就是可以为所欲为; 2.普通用户:除了root用户外,都是普通…

【2023春招】4399 web后台-Java后端开发

目录 一、JVM1.类加载过程2.static和final变量的初始化时机 二、依赖1.Spring Boot 自动装配2.使用依赖过程中遇到问题如何排查3.引入的某个依赖不符合预期,如何处理 三、数据库:1.InnoDB 和 MyISAM 索引的区别2.字符串类型字段,WHERE 数字&a…

枚举【Java】

文章目录 枚举的使用switch语句Enum类的常用方法枚举的构造方法 反射与枚举 在之前的学习中,如果我们需要组织一组枚举类型的数据,我们通常会使用常量来进行定义。但这种定义方式存在一个问题就是:如果在一个程序中,普通常量和使用…

1053 Path of Equal Weight(超级无敌详细注释+45行代码)

分数 30 全屏浏览题目 切换布局 作者 CHEN, Yue 单位 浙江大学 Given a non-empty tree with root R, and with weight Wi​ assigned to each tree node Ti​. The weight of a path from R to L is defined to be the sum of the weights of all the nodes along the pa…