c++的学习之路:2、入门(1)

一、 C++关键字

c++的关键字要比c语言要多31个足足有63个,这里我只是了解了下每个有啥作用,具体使用方法以及更多的知识将在后续学习中,慢慢扩展使用,下方表格就是c++的63个关键字

asmdoifreturntryauto
doubleinlinetypedefdynamic_castinttypeid
publicbreakelselongsizeoftypename
throwcaseenummutablestaticwchar_t
catchexplicitnamespacestatic_castunsigneddefault
charexportnewstructfriendclass
externoperatorswitchregisterconstfalse
privatetemplatetrueconst_castprotectedthis
whiledeletegotoreinterpret_castshortfor
boolsignedunionusingfloatvolatile
voidvirtualcontinue

二、命名空间

在刚学习c语言的时候,我遇到过定义了重复的变量名或者函数名,那时候喜欢都定义成a、b这些经常出现重定义,要不就是和库函数相同了,但是在c++中,提出了命名空间这个概念,他的大概意思就是把一块函数或者变量封存在一起,例如下方代码演示,就会出现如图所示的错误,这是就可以使用命名空间。

#include <iostream>
using namespace std;
int a = 0;

int a = 1;

int main()
{
    cout << a << endl;
    return 0;
}

如下图就是命名空间的最简单使用,说白了就是相当于重新建立了一个范围,并且把这块空间的变量啊函数啊等等的都包含在这里面,相当于一个库函数,但是不通过:: 这个符号的访问会找不到,这个符号前面就是需要寻找的空间名,也就是namespace命名的空间,如代码中LY1就是一个命名,这个命名可以自定义,我比较喜欢用我的名字缩写,所以之后的命名空间不出意外应该都是这样类型的。

#include <iostream>
using namespace std;
namespace Ly1
{
    int a = 0;
}

namespace Ly2
{
    int a = 1;
}

int main()
{
    cout << Ly1::a << endl;
    cout << Ly2::a << endl;
    return 0;
}

好了上文讲了为啥会有命名空间,那么接下来将讲下命名空间的三种用法 

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

如上文中代码 cout << Ly1::a << endl;cout << Ly2::a << endl;这两句就是访问LY1和LY2进行打印输出两个空间a的数值就是加加命名空间名称及作用域限定符的使用方法,就不过多讲了,一般会用就可以。

2、使用using进行全部展开

如上文代码using namespace std;这个就是全部展开,这样我在下面使用cout和endl时就不需要再加上作用域限定符。

3、使用using部分展开

这个就如下代码和测试结果就是部分展开的使用,展开了所以a在使用中就不需要加上作用域限定符了,而b加上了,c没加上所以就报错了,没有找到c,为什们会有全展开和部分展开,因为在使用过程中,如果每一步都加上作用域限定符会显得很麻烦,所以在确定某个函数或者变量经常使用又不会出现重复时就可以进行部分展开或者全部展开方便进行使用。

namespace Ly1
{
    int a = 0;
    int b = 1;
    int c = 2;
}
using Ly1::a;
int main()
{
    cout << a << endl;
    cout << Ly1::b << endl;
    cout << c << endl;
    return 0;
}

命名空间是可以进行嵌套的,如下方代码 和测试结果就是找不到b变量,那是因为在Ly1这个空间里是Ly2并不是b所以要想a变量那要嵌套访问才能找到。

namespace Ly1
{
    namespace Ly2
    {
        int a = 0;
        int b = 1;
        int c = 2;
    }
}
int main()
{
    cout << Ly1::Ly2::a << endl;
    cout << Ly1::b << endl;
    return 0;
}

三、 C++输入&输出

输入和输出这是每个编程语言都会有的,例如c语言的scanf和printf,c++的就是cout和cin,他就是控制台输出和控制台输入,是一种流输入输出,就像c语言的文件管理时,要先调用file,想要使用文件就先要打开流一样,这里c++的输入与输出是可以自动识别类型的,这点就比c语言要人性一点,代码使用与测试结果如下,如图就是这个输入输出的使用,endl就是换行,值得一提是,他的流入与流出就是>><<这两个,这个在c语言中是位移操作,这里是向左就是流入,向右就是流出。

int main()
{
    int a = 1;
    double b = 2.22;
    cout << a << endl;
    cout << b << endl;
    cin >> a;
    cin >> b;
    cout << a << endl;
    cout << b << endl;
    return 0;
}                                    

四、 缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参,这个最能体现的就是当时我学数据结构时,有个单链表用数组组成的,当时有个容量,我是在初始化就开辟了一点空间,但是只有4个字节,如果我想要存入100个int型的数据就要先开辟,那么这个缺省参数就可以很好的解决这个问题,因为当我知道有100个需要存储的数据,就可以直接给定100,直接开辟,省了很多消耗,下面我将讲下缺省参数的几种使用方式以及注意事项。

第一种就是如图这样不给函数参数就直接使用函数的形参

第二种就是给定参数,这时函数就使用实参的值,如图所示

接着就是第三种再有很多个形参时,是怎么使用,如图就是当有三个参数时,怎么使用,他还是有参数传递过来时使用实参的值,没有还是使用形参,但是这里要注意必须从右到左省略,不能传了a和c不传b,也不能传传后面不传a的,具体为啥,我也不知道,这就是c++规定的,而且还不能同时定义形参的值,就是不能在函数里定义了缺省参数,却又在声明时有定义一遍,c++也规定了只能在声明中定义,也就是当有声明时 ,只能在定义中声明,不能在函数中定义。


五、 函数重载

函数重载这个也是个很方便的,在c语言中如果有两个同样函数名的函数时也会报错,他在编译时会找不到使用那个函数,但是c++不一样,假如我定义两个ADD函数,一个加整数,一个加小数,就可以这样使用,代码与测试结果如图,就可以同时使用,这里就可以看出c++支持函数重名。

int ADD(int a, int b)
{
    return a + b;
}

double ADD(double a, double b)
{
    return a + b;
}

int main()
{
    int a = 1, b = 2;
    double c = 1.1, d = 2.2;
    cout << ADD(a, b) << endl;
    cout << ADD(c, d) << endl;
    return 0;
}

但是这个使用也是有限制:
1、参数类型不同

参数类型不同这个很好理解就如上文代码就是参数类型不用,int和double就是不同的类型。

2、参数个数不同

参数个数不同这个如下代码,一个两个一个三个就是参数类型不同,当然具体几个没有要求

int ADD(int a, int b)
{
    return a + b;
}

int ADD(int a, int b,int c)
{
    return a + b+c;
}

int main()
{
    int a = 1, b = 2,c=3;
    cout << ADD(a, b) << endl;
    cout << ADD(a,b,c) << endl;
    return 0;
}

3、参数类型顺序不同

参数顺序不同就是怎么说呢,直接上代码,这种就是参数类型不同,第一个就是double在前,第二个就是double在后,这种也是可以使用函数重载。

void Print(double a, int b)
{
    cout <<a << endl;
    cout << b << endl;
}

void Print(int a, double b)
{
    cout << a << endl;
    cout << b << endl;
}

int main()
{
    Print(6.66, 6);
    Print(6, 6.66);
    return 0;
}

还有一点就是函数重载他是在编译的时候找到对应函数的地址如下图汇编代码,两个call就是对应函数的地址。

这个函数在编译的时候是把函数名称提换成别的名字,如下图就是在Windows环线中编译报错提示找不到这个函数,也就是这个函数替换后的名字,具体怎么命名的我也不太清楚,Linux后期学了,会放Linux的命名规则图的。

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

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

相关文章

#鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行

3 月 19 日&#xff0c;#鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行。 现场&#xff0c;深圳市南山区人民政府副区长李志娜发布《2024 年南山区支持鸿蒙原生应用发展首批政策措施清单》&#xff0c;从加强鸿蒙原生应用供给能力、推动鸿蒙原生应用产业集聚、完善鸿蒙原生…

Go语言学习Day1:什么是Go?

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、走近Go①Go语言的Logo②Go语言的创始人③Go语…

【开源】SpringBoot框架开发知识图谱构建系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 知识图谱模块2.2 知识点模块2.3 学生测评模块2.4 学生成绩模块 三、系统展示四、核心代码4.1 查询知识点4.2 新增知识点4.3 查询知识图谱4.4 查询学生成绩4.5 查询学生成绩 五、免责说明 一、摘要 1.1 项目介绍 基于J…

PycharmJH码,Pycharm稳定专属JH码(全网最新)

以idea为例&#xff0c;其他JH类似哦 第一步&#xff1a;下载J活工具包 首先&#xff0c;请先进行下载J活工具&#xff0c;如果之前已经下载&#xff0c;请直接跳过此环节。 &#x1f447;&#x1f447;点击链接中的链接&#xff0c;回复“永久”即可获取永久包&#x1f447;…

jenkins Pipeline接入mysql

背景&#xff1a; jenkin pipeline进化过程如下&#xff1a; Jenkins Pipeline 脚本优化实践&#xff1a;从繁琐到简洁 >>>>> Jenkins Pipeline脚本优化&#xff1a;为Kubernetes应用部署增加状态检测>>>>>> 使用Jenkins和单个模板部署多个K…

天地一体化5G网络中LNA的辐射效应

Youssouf A S, Habaebi M H, Hasbullah N F. The radiation effect on low noise amplifier implemented in the space-aerial–terrestrial integrated 5G networks[J]. IEEE Access, 2021, 9: 46641-46651. 图2 面向卫星的5G综合网络架构方案 这篇论文《The Radiation Effect…

redis功能点

一、redis简介 概述 Redis 是速度非常快的非关系型&#xff08;NoSQL&#xff09;内存键值数据库&#xff0c;可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串&#xff0c;值支持五种数据类型&#xff1a;字符串、列表、集合、散列表、有序集合。 Redis 支持很…

粘度指数改进剂市场需求增长 为润滑油添加剂细分产品

粘度指数改进剂市场需求增长 为润滑油添加剂细分产品 粘度指数改进剂是一种油溶性高分子聚合物&#xff0c;主要用于提高润滑油粘度以及粘度指数。粘度指数改进剂具有稠化能力强、抗磨性好、热稳定性好等优势&#xff0c;可添加于液压油、内燃机油以及齿轮油等油品中。 …

dij最短路径算法

Dijkstra算法解决的是单源最短路径问题:对于给定的有向网络G=(V,E)及单个源点v,求从v到G的其余各顶点的最短路径。 本文以下面的有向网络(用邻接矩阵存储)为例,并假设源点为1。 #include<stdio.h> #define maxsize 1000 //表示两点间不可达,距离为无穷远 #define…

基于SSM+Jsp+Mysql的KTV点歌系统

基于SSMJspMysql的KTV点歌系统 基于SSMJspMysql的KTV点歌系统的设计与实现 开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工…

TikTok能不能用或许没那么重要,重要的是互联网的互联时代结束了

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 朱峰 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo TikTok与美国政府“掰头”了五年多&#xff0c;换来一纸看来肯定可以通过的法案&#xff0c;而这条法案&#xff0c;可能会影响到所有…

HMI界面之:教育培训领域的重要帮手

一、教育培训行业都有哪些HMI界面形式 HMI人机交互界面在教育培训领域有以下几种形式&#xff1a; 电子白板&#xff1a;电子白板是一种交互式的教学工具&#xff0c;可以让教师和学生在白板上进行书写、标注、绘图等操作&#xff0c;与计算机进行互动&#xff0c;提高教学效果…

能见度监测站介绍

TH-NJD50能见度监测站是一种专门用于监测和记录大气中能见度的设备站点。其工作原理主要基于光在大气中的衰减规律&#xff0c;通过透射仪向一定距离的接收器发射光束&#xff0c;接收器测量经过大气透射的光强&#xff0c;从而计算出能见度。能见度是气象学中一个重要的气象要…

Twincat实现电机控制

不仅是控制系统的核心部分&#xff0c;而且能够将任何基于PC的系统转换为一个带有PLC、NC、CNC和机器人实时操作系统的实时控制系统。TwinCAT软件在工业自动化领域具有广泛的应用&#xff0c;特别是在机器人关节电机控制方面!!! 在机器人关节电机控制方面&#xff0c;TwinCAT通…

Linux的基本使用

1.Linux的背景 1.1什么Linux Linux是⼀个操作系统.和Windows是"并列"的关系. 1.2Linux系统的优势 1. 开源(意味着免费,便宜) 2. 稳定(Linux可以运⾏很多年,都不会发⽣重⼤问题) 3. 安全(Linux只有管理员或者特定⽤⼾才能访问Linux内核) 4. ⾃由(不会被强加商业产品和…

关于Ansible的模块 ①

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 什么是Ansible模块 在Linux中&#xff0c;bash无论是在命令行上执行&#xff0c;还是在bash脚本中&#xff0c;都需要调用cd、l…

小程序搜索排名优化二三事

小程序的优化主要是排名优化和性能优化两个版块。性能优化这方面主要靠开发者自己完善&#xff0c;我们团队提供的服务就是把产品的排名打上去&#xff0c;获得更多的自然流量&#xff0c;实现盈利。 如何提升小程序的搜索排名主要从如下几个方面出发&#xff1a; 首先要知道…

STM32利用标准库实现串口接收数据

先看下本次实验的结果吧&#xff1a; 这次的代码是在上个文章代码的基础上有一些更改而来的&#xff0c;具体更改了何处来看看图吧&#xff1a; 总共就更改了这些内容&#xff0c;就实现了单片机的串口发送接收的功能&#xff0c;看起来还是很简单的吧&#xff01; 剩下就是主…

ROS机器人入门第一课:ROS快速体验——python实现HelloWorld

文章目录 ROS机器人入门第一课&#xff1a;ROS快速体验——python实现HelloWorld一、HelloWorld实现简介&#xff08;一&#xff09;创建工作空间并初始化&#xff08;二&#xff09;进入 src 创建 ros 包并添加依赖 二、HelloWorld(Python版)&#xff08;二&#xff09;进入 r…

巨细!Python爬虫详解

爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在 FOAF 社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff1b;它是一种按照一定的规则&#xff0c;自动地抓取网络信息的程序或者脚本。 如果我们把互联网比作一张大的蜘蛛网&#xff0c;那…