[C++]C++入门(一)

news2024/9/23 11:54:28

目录

前言:

一、C++关键字:

二、命名空间:

三、C++输入和输出:

四、缺省参数:

五、函数重载:

六、引用:

常引用:

​编辑引用和指针的区别:

引用和指针的不同点:

总结:


前言:

        今天开始我们就进入C++学习。C++是在C的基础上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程方式等等。所以说C++跟C语言有很大的关系,一般情况下学C++前都需要先学C语言。可以说C++就是补充了C语言语法的不足之处。

一、C++关键字:

        C++一共有63个关键字,C语言32个关键字,也就是说C++在C语言的基础上多了一倍的关键字。

asm  doifreturntrycontinue
autodoubleinlineshorttypedeffor
booldynamic_castintsignedtypeidpublic
breakelselongsizeoftypenamethrow
caseenummutablestaticunionwchar_t
catchexplicitnamespacestatic_castunsigneddefault
charexportnewstructusingfriend
classexternoperatorswitchvirtualregister
constfalseprivatetemplatevoidtrue
const_castfloatprotectedthisvolatilewhile
deletegotoreinterpret_cast

二、命名空间:

        命名空间是为了防止自己的命名与C/C++库中名称相同而不能适用,有了命名空间后,以前不能在C语言中使用的名称可以命名空间中使用,要访问只需要在前面加上域作用限定符即可。当然,关键字是不能使用的即使在命名空间也不可。

 而要解决上面这个问题,就要用到命名空间。也就是定义一个域:

上面使用的::是域作用限定符。

命名空间也支持嵌套:

namespace zxx
{
    int rand=1;
    namespace zxx1
    {
        int y=1;
    }
}

         在C语言学习中,我们就知道全局变量和局部变量相同时,编译器会优先访问局部变量,也就是编译器访问顺序是局部域—>全局域。而当我们指定域之后,编译器就会到我们指定域内去找。

        在同一个工程中允许存在多个相同名称的命名空间,编译器最后会把他们合成一个命名空间中。一个命名空间就是定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。

命名空间使用方法不单单只有一种方法,还有另外两种方法:

在使用using将命名空间中的某个成员展开:

namespace zxx
{
    int rand=1;
    int a=2;
}
using zxx::a;
int main()
{
    printf("a=%d",a);
    return 0;
}
//这时便可以访问到a,但是无法访问到y;
    

 使用using namespace展开一整个域:

namespace zxx
{
    int rand=1;
    int a=2;
}
using namespace zxx;
int main()
{
    printf("a=%d",a);
    printf("y=%d",y);

    return 0;
}
//这时zxx整个域的内容都可以访问到;
    

三、C++输入和输出:

        std是C++标准库的命名空间名,C++将标准库的定义实现都放在这个命名空间中。

①.使用count标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含<iostream>头文件已经命名空间使用方法使用std;

②.cout和cin是全局得流对象,endl是特殊得C++符号,表示换行输出。

③.<<是流插入运算符,>>是流提取运算符;

④.使用C++输入输出更方便,不需要像printf和scanf自己控制变量类型,cout和cin可以自动识别变量类型。

四、缺省参数:

        缺省参数就是声明或定义函数时为函数得参数指定一个缺省值,如果你再调用这个函数时没有传参,那么这个函数得参数就是缺省值,如果你调用时传参了,那么这个函数得参数值就是你所传参数的值。

 缺省参数又可分为全缺省和半缺省,全缺省指的是:函数的每个参数都给了缺省值,半缺省就是函数参数只给了个别的缺省值。

ps:①半缺省参数必须从又往左一次给,不能间隔给;

     ②.缺省参数不能再函数声明和定义中同时出现;

     ③.缺省值必须是常量或者全局变量。 

五、函数重载:

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

第一种:参数顺序不同

第二种:参数个数不同

 第三种:参数类型不同

 

ps:函数返回值不同不能作为重载函数。

六、引用:

C++中的引用非常好用,可以避免我们在C语言中使用一二级指针等等,引用不是重新定义一个变量,而是给这个变量起一个别名,他和他引用的变量在同一个空间地址。

        如上图,b就是a的引用,也就是a的别名,我们可以看到它们两个的地址是一样的,也就是说他俩指向同一块空间。而且引用类型一定是和引用实体是同种类型的。 

         如上图,a++后b也跟着++了,然后我让b++之后a也跟着++了,也就证明k就是a,a就是b;

        在C语言阶段,我们要交换两个变量的值需要传地址,现在只需要用引用就可以了。

 

ps:

①.引用在定义时必须初始化;

②.一个变量可以有多个引用;

③.引用一旦引用一个实体,再不能引用其他实体。

引用不单单用于刚刚swap函数中做参数,引用还可以做返回值:

        我们都知道当函数结束需要返回的时候会创建一个临时变量去接收返回值,然后销毁函数栈帧,那么在创建临时变量的过程中无疑会浪费空间,我们发现当一个变量是静态的或者是动态,函数结束时不会销毁的, 那么我们就可以用引用返回,这样就避免了空间的浪费。

         从上图我们可以看到ay是我们创建的结构体对象,这个对象在main函数结束之后才会销毁,那么像以前C语言那样,每次函数返回一个值就需要开一个临时变量去接收返回值很浪费空间,既然这个变量在函数调用后没有被销毁那么就可以直接返回自己,所以在上图中我们使用了引用作为返回值。

用引用的好处:①减少拷贝;②调用者可以修改返回对象。

ps:引用返回仅限于函数栈帧销毁后还存在变量,返回值如果被销毁就必须传值返回。

常引用:

        

为什么我们不能去引用const修饰的变量呢?

        这是因为指针和引用,在赋值或初始化的时候权限只能缩小或者平移,不能放大。 本来a的权限仅仅是制度,结果在引用的时候给b可读可写的权限了。

 

        上图报错的原因是ADD函数的返回类型为传值返回,传值返回返回的是临时变量,由于临时变量具有常性,所以我们必须加上const。

引用和指针的区别:

         在语法概念上引用就是变量的别名,没有独立空间和其引用实体公用一块空间。而底层实现上是有空间的,因为引用就是按照指针的方式实现的。 

从上图我们可以看到int& b=a和int* p=&a的反汇编实现是一样的,这也可以证明引用是按照指针的方式来实现的。

引用和指针的不同点:

①引用概念上是定义一个变量的别买那个,指针存储一个变量地址;
②引用在定义时必须初始化,而指针可以不初始化; 
③引用在初始化引用一个实体后便不可再去引用其他实体,而指针可以在任何时候指向任何一个同类型的实体;

④没有后空引用,但是有空指针;

⑥引用自加就是其引用实体自加,而指针自加是指针往后偏移一个类型大小;

⑦有多级指针,但是没有多级引用;

⑧访问实体的方式不同,指针需要显示解引用,引用由编译器自动处理。

⑨引用比指针使用起来相对更安全

总结:

        本次讲解的都是从C语言过度到C++所改进的一些东西,这些东西更加偏向于语法,可能会有点抽象,需要大家反复理解。

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

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

相关文章

九联UNT401H-Hi3798MV300/MV310-当贝纯净桌面-强刷卡刷固件包

九联UNT401H-Hi3798MV300&#xff0f;MV310-当贝纯净桌面-强刷卡刷固件包-内有教程 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内置…

达摩院开源多模态对话大模型mPLUG-Owl

miniGPT-4的热度至今未减&#xff0c;距离LLaVA的推出也不到半个月&#xff0c;而新的看图聊天模型已经问世了。今天要介绍的模型是一款类似于miniGPT-4和LLaVA的多模态对话生成模型&#xff0c;它的名字叫mPLUG-Owl。 论文链接&#xff1a;https://arxiv.org/abs/2304.14178…

《NFT区块链进阶指南二》Etherscan验证Solidity智能合约(Remix插件验证)

文章目录 一、验证说明二、Etherscan Key三、验证插件四、源码认证4.1 Remix验证&#xff08;推荐&#xff09;4.1.1 无构造参数合约验证4.1.2 有构造参数合约验证 4.2 单文件验证&#xff08;不推荐&#xff09;4.3 Hardhat部署&#xff08;按照需要&#xff09; 五、验证结果…

( 位运算 ) 461. 汉明距离 ——【Leetcode每日一题】

❓461. 汉明距离 难度&#xff1a;简单 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y&#xff0c;计算并返回它们之间的汉明距离。 示例 1&#xff1a; 输入&#xff1a;x 1, y 4 输出&#xff1a;2 解释&#xff1a; 1…

Python 字典修改对应的键值

将 key ‘1’ 的值 ‘1’, ‘3’, ‘5’ 字符&#xff0c;修改为 ‘2’, ‘4’, ‘5’ 。 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单………

Cy5.5 NHS ester 氨基反应性荧光染料Cyanine5.5 -NHS

Cy5.5 NHS ester是一种常用的荧光探针&#xff0c;可用于细胞或组织的荧光标记&#xff0c;也可用于蛋白质或核酸的标记。Cy5.5 NHS ester的荧光峰位于近红外区域&#xff0c;波长为675nm&#xff0c;具有较强的荧光强度和较长的荧光寿命&#xff0c;适合于生物分子在体内或组织…

用友nc软件被locked1勒索病毒攻击,解密恢复oracle数据库与用友nchome的配置文件

当用友NC软件被locked1勒索病毒攻击后&#xff0c;对应企业的oracle数据库和nchome配置文件往往也会受到影响。数据库和配置文件是企业运营的基础&#xff0c;一旦受到感染会导致企业无法正常运转。因此&#xff0c;遇到这种情况需要采取正确的方法来解密恢复对应的Oracle数据库…

手机日程提醒在哪里设置?

在每天要处理的各类事项比较多&#xff0c;且繁杂的情况下&#xff0c;想要有条不紊地安排好每个时间段应该完成的事项&#xff0c;提前设置好日程提醒是非常有必要的。 那么手机日程提醒在哪里设置呢&#xff1f;无论你使用的是小米、荣耀、OPPO等安卓手机&#xff0c;还是华为…

学顶教育:2023年中级经济师什么时候报名?

一、2023年中级经济师申请时间 2023年中级经济师报名时间预计7、8月左右开始&#xff0c;考试时间为11月11-12日。 届时考生可关注中国人事考试网发布的公告。 二、中级经济师网上报名需提供以下材料&#xff1a; 1、 准备一张白色背景的近期免冠照片&#xff0c;尺寸为25mm…

如何构建一个高效的企业舆情监测系统?

随着互联网的快速发展&#xff0c;企业需要对自身在网络上的形象和声誉进行全方位的监控和管理&#xff0c;以保证企业的长期稳定发展。构建一个高效的企业舆情监测系统已经成为了当下企业发展的必要手段。本文将通过国内具体案例分析&#xff0c;阐述如何构建一个高效的企业舆…

和月薪5W的聊过后,才发现自己一直在打杂···

前几天和一个朋友聊面试&#xff0c;他说上个月同时拿到了腾讯和阿里的offer&#xff0c;最后选择了阿里。 我了解了下他的面试过程&#xff0c;就一点&#xff0c;不管是阿里还是腾讯的面试&#xff0c;这个级别的程序员&#xff0c;都会考察项目管理能力&#xff0c;并且权重…

SLAM论文速递:SLAM—(2021) 基于目标检测的动态环境下的视觉SLAM—5.05(1)

论文信息 题目&#xff1a; Visual SLAM in dynamic environments based on object detection 基于目标检测的动态环境下的视觉SLAM论文地址&#xff1a; https://www.sciencedirect.com/science/article/pii/S2214914720304402发表期刊&#xff1a; Defence Technology,&…

2019年上半年软件设计师下午试题

试题四(共 15 分) 阅读下列说明和 C 代码&#xff0c;回答问题 1 至 3&#xff0c;将解答写在答题纸的对应栏内 【说明】 n 皇后问题描述为&#xff1a;在一个 n*n 的棋盘上摆放 n 个皇后&#xff0c;要求任意两个皇后不能冲突, 即任意两个皇后不在同一行、同一列或者同一斜…

【Java入门合集】第五章抽象类和接口(一)

博主&#xff1a;命运之光 专栏&#xff1a;JAVA入门 学习目标 1.了解什么是抽象类&#xff0c;什么是接口&#xff1b; 2.掌握抽象类和接口的定义方法&#xff1b; 3.理解接口和抽象类的使用场景&#xff1b; 4.掌握多态的含义和用法&#xff1b; 5.掌握内部类的定义方法和使用…

2023爱分析·数据开发与管理平台市场厂商评估报告

01.研究范围定义 利用多种数据智能技术实现数据驱动的分析与决策&#xff0c;已经成为当前企业数字化转型最重要的目标之一。随着数据来源日益丰富、数据体量快速增长&#xff0c;企业对数据的依赖和挖掘愈发深入&#xff0c;不仅带来数据应用场景、数据用户角色的复杂和多元&…

“STL算法大全“

前言 欢迎来到&#x1f496;小K&#x1f496;的&#x1f49e;C专栏&#x1f49e;&#xff0c;本小节是继非质变算法的第二篇CSTL算法&#xff0c;所以本节总结了大量的STL算法&#xff0c;以便大家需要时查阅 文章目录 前言质变算法查找算法(13个)排序和通用算法(14个)删除和替…

k8s nfs运行问题、etcd问题、calico网络问题

服务器重启后nfs运行问题导致服务不能正常重启 解决办法 在每个节点下使用如下命令进行查看nfs是否正常启动 systemctl status nfs 如果没有启动&#xff0c;则使用如下命令启动&#xff0c;保证三个节点下的nfs都正常启动 systemctl start nfs 再次查看nfs是否正常启动 syst…

你真的理解PyTorch中的dimension嘛?

文章目录 Understanding dimensions in PyTorch参考 Understanding dimensions in PyTorch 通过可视化3D张量上的求和过程&#xff0c;为PyTorch维度提供更好的直觉 当我们开始用PyTorch张量做一些基本的运算&#xff0c;比如求和时&#xff0c;对于一维张量来说&#xff0c;…

Mysql事务与存储引擎

目录 一、事务的概念二、事务的特点ACID2.1 原子性2.2 一致性2.3 隔离性2.4 持久性2.5 事务的互相影响 三、Mysql事务隔离级别3.1 查询全局事务隔离界别3.2 查询会话事务隔离级别3.3 设置全局事务隔离级别3.4 设置会话事务隔离级别 四、事务控制语句4.1 开始事务与提交4.2 事务…

不同问题来评测百度、谷歌、ChatGPT、Phind、GPT-4(持续更新)

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…