栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++ - 第1节 - c++入门

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++ - 第1节 - c++入门

1.C++关键字(C++98)

C++总计63个关键字,C语言32个关键字

下面我们只是看一下C++有多少关键字,不对关键字进行具体的讲解。后面我们学到以后再细讲


2. 命名空间

1.c++中的#include与c语言中的#include类似,包含IO流,是用来和控制台进行输入输出的

2.命名冲突:一种情况,我们要使用rand作为一个变量的变量名,如果不包含stdio.h头文件的话,程序可以正常通过,如果包含了stdio.h头文件,那么就会提示重定义,因为stdio.h中rand是一个库函数,这就造成了命名冲突,但是语法只规定变量名不能和关键字相同,没有规定变量名不能和库函数名相同。另一种情况,两个人合作写工程代码,一个人定义了一个变量名a,另一个人定义了一个函数名a,这样也会造成命名冲突。也就是定义一个全局变量名,有可能会和库里面函数名或自定义函数名冲突,也有可能和自定义全局变量名冲突

c语言没有很好的解决这个问题,cpp引入namespace解决这个问题

3.在同一个域里面不能有同名的变量名或函数名,如果有同名的变量名或函数名就会造成命名冲突。比如,定义两个全局变量名或两个函数名f或一个全局变量名一个函数名,就会造成命名冲突,而一个全局变量名或函数名和一个局部变量名是不会造成命名冲突的。因此我们使用namespace关键字,建立一个命名空间域,与外面的全局变量名或函数名隔离开,就不会造成命名冲突了。

namespace建立的命名空间域,不同的人使用不同命名的命名空间域即可(只要命名空间域名字不同并且同一域里面的名字不冲突就没有问题)如下图一行左所示。

命名空间域中不仅可以定义变量还可以定义函数、结构体类型等,如下图一行右所示

命名相同的两个命名空间是可以同时存在的,在代码运行的时候会被合并成一个,如果命名相同的两个命名空间中有命名相同的变量名,最后代码将两个命名空间合并的时候里面命名相同的变量名就会冲突,解决办法是可以进行命名空间嵌套,如下图二行图所示

命名空间是可以进行嵌套的,嵌套几层访问的时候使用几个::即可,如下图二行图所示

命名空间只是用来进行隔离的,不影响里面变量的生命周期,并且命名空间不能在函数里面定义,所以命名空间里面的变量为全局变量,如下图三行图所示

      

4.如下图所示,我们知道相同的变量名,局部变量优先,所以打印出来为1,而如果我们想打印全局变量a,我们只需要在a的前面加 “ 空格:: ” ,那么访问的就是全局的a。::是域作用限定符,作用是指定右边的变量名是在左边域中的变量名,空格默认为全局域。空格::a就是访问全局域中的变量a(::a左边也可以不加空格,左边不加空格那么左边就没有是空白的,也认为全局域,加上空格更加形象)

5.有一个函数f和一个命名空间域中的变量f,在主函数中如果只写一个f那么访问的是函数f,要想访问命名空间域中的变量f,使用 bit::rand 即可,如下图所示

6.如果命名空间多次嵌套,每次定义都需要从外往里写命名空间名很麻烦,使用

using namespace+命名空间名 可以把命名空间名对应这个命名空间定义的东西放出来,相当于没有该层命名空间了,如下图第一二行所示。这里不能先展开data再展开byte,如下图三行所示,是错误的,因为byte是在外面的。如果写成using namespace byte::cache,那么展开的只是cache命名空间,byte命名空间没有展开

7.如下图所示,每次使用变量f和rand,前面都需要加 bit:: 这样很麻烦。第一种方法是我们前面提到的加一句using namespace bit进行展开,后面用到f变量直接写f即可,但是这样做的话会把rand也放出来,使用rand变量如果包含了stdlib.h,那么就会和rand库函数冲突。我们可以用什么展什么,可以using bit::f只放f出来,这样使用f变量时直接写f,使用rand变量时,写bit::rand。因此using的使用有两种方式:

(1)using namespace+命名空间名   将命名空间名对应的命名空间全部释放出来

(2)using 命名空间名 :: 变量名  只放某个变量出来

8. c++代码我们可以看到前面很多时候会这样写using namespace std,是为了解封std命名空间,这样后面使用里面的变量前面就可以不用写std::了,如下图一行左所示,这样放出来,方便使用了,但是存在冲突风险,如果再定义一个全局变量cout就会造成变量名冲突,如下图一行右所示。

如果不加using namespace std的话,那么所有使用std里面的变量前面都需要加std:: ,但是这样就不会再访问冲突了,如下图三行所示,这体现了命名空间的优势

这里我们可以只把常用的放出来,例如放cout出来,使用using std::count,那么所有的cout前面可以不用再加std::,如下图三行左所示,这里如果有全局变量也叫cout,同样会造成访问冲突,如下图三行右所示。

  

 

   


3.C++输入&输出

1.流提取运算符: >>   

        cin >> a ( 与scanf("%d",&a)效果相同 )

2.流插入运算符: <<   

        cout << a( 与printf("%d",a)效果相同 )

注:

1.流提取运算符和流插入运算符可以自动识别类型并且可以一行输入输出多个,提取时数字间还是以空格或回车分割

2.输出时如果要换行,那么就在后面加一个endl或'n'

3.下面代码中cout << "hello world" << endl是提取一个字符串再提取一个换行

4.c++是兼容c语言的,如果想控制格式输出,比如控制小数点后位数输出,可以用printf函数

    printf函数、scanf函数、>>、<<是可以混着用的


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

4.2.缺省参数分类

1.全缺省参数

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/886610.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号