初识C++(1)

引入:C与C++

我们原来就知道,C语言是一个面向过程的编程语言,
而C++是一个面向对象的编程语言。
C++是在C语言的基础之上产生与发展的,它的语法与功能对C语言进行了优化与增加,丰富了我们的编程工具。下面,我们正式打开C++的大门

1.命名空间域

1.1概念

我们知道在C语言中,定义变量不同那个的变量的名字不能冲突;但在实际工程中,一个项目往往需要多人协作完成,这是每个人所命名的变量不可避免的会冲突,甚至个人定义的变量名会和库中的变量函数名起冲突。C++中为了解决这些问题,引入了命名空间的概念。

在这里插入图片描述
什么是命名空间?
命名空间就是对标识符(变量、函数)的名称进行本地化,避免命名冲突的空间。

1.2命名空间的定义

我们定义命名空间需要用到C++库里的一个关键字:

namespace

命名空间域的语法规则:

namespace Zhao 
{
	//定义变量
	int a;
	int b;
	//定义结构体
	struct A {
		int I;
		int LOVE;
		int YOU;
	};
	//定义函数
	int ADD(int x, int y)
	{
		return x+y;
	}
	//命名空间的嵌套
	namespace little_Zhao
	{
		int a;
		//.....
	}
}

命名空间的特点:
1.命名空间内部可定义变量、函数、类型
2.命名空间支持嵌套
我们了解了命名空间域的基本特性,不妨来回忆一下C语言学习期间的作用域的概念。
我们之前知道:作用域有——全局域,局部域;
今天的命名空间也属于作用域,我们定义了一个命名空间就是定义了一个新的作用域

1.3命名空间的使用

那我们如何访问到命名空间域呢?
我们知道,当不指定空间,编译器搜索时会按以下步骤进行:
1.现在局部域中进行搜索
2.全局域中进行收索;
那定义了一个命名空间域编译器能否自动去命名空间域去寻找呢,我们不妨做一下实验:在这里插入图片描述
说明编译器并不会自动去命名空间中搜索
那我们指定想要的作用域搜索要如何做呢?
这就不得不介绍域作用限定符——::
域作用限定符的作用就是指定直接在某作用域中搜索
因此我们有了第一种使用命名空间的方式:空间的名称+作用限定符。
例如:我们访问Zhao空间中的a变量。
在这里插入图片描述
特例:那嵌套的空间中的变量又该如何访问呢?
在这里插入图片描述
由此可见,域作用限定符也可嵌套使用。
我们每访问一次域名空间都要适用于限定符有些麻烦,因此在C++中我们还用两种访问/使用命名空间域的方式——直接将命名空间或内部的变量进行展开,我们又需要用到新的关键字:

using

方法二:展开某一个域名空间

在这里插入图片描述
方法三:展开指定域名空间中的命名空间
在这里插入图片描述
注意展开的只能是命名空间*不能为其他。*不然编译器会报错
在这里插入图片描述
最后,命名空间还需注意使用using展开后就相当于作用在全局域(或局部域),所以使用using展开时需要谨慎处理。

2.C++版本的输入与输出

还记得当初第一次学习C语言时,我们第一次认识的程序便是在屏幕上打印字符串“hello world”。
那C++同样我们从打印开始学起,下面我们一起来看一个代码:

在这里插入图片描述
iostream :是一个头文件,cout流被包含在其中;
std: 其实是所有C++库中的命名空间,所以红色圈起来的代码表示:展开所有C++库中的命名空间;
cout :其实是一个输出流,同时我们还有输入流——cin
<<: 大家是不是很眼熟?没错它是C语言中的左移运算符,但在此处他有另外的含义:流插入并自动识别类型,在这它是一个流插入运算符。C++中我们不用控制变量类型进行打印,<<就能自动识别类型。同时 >> 就是一个流提取操作符
endl :相当于“\n”.
至此,我们初步就能读一些C++代码了

3.缺省参数

3.1缺省参数的概念

缺省参数其实是在声明定义函数时指定一个缺省值,如下:

在这里插入图片描述
如图中实验可看出:
调用函数时若没有指定相应的实参,那调用时使用形参的缺省值
指定了实参则直接调用实参的值,形参缺省值此时不起作用。

3.2缺省参数的分类

当一个函数有多个参数时,缺省参数可分为半缺省全缺省参数
全缺省参数

在这里插入图片描述

半缺省参数
在这里插入图片描述
缺省参数的调用同样不能间隔调用,只能从左往右调,这一点对全缺省与半缺省都一样。在这里插入图片描述

3.3声明与定义分离的缺省参数

在实际工程中,函数的声明与定义往往在两个文件(头文件与cpp文件)中,那此时缺省参数要放在哪呢?
在这里插入图片描述
如图所示,缺省参数在声明与定义中都出现编译器会报错。
那缺省参数应该写到哪呢
要深刻认识这个问题我们不妨再来回忆一下编译器的翻译过程:
在这里插入图片描述
当找不到函数的定义时,编译器将会报链接的错误:
在这里插入图片描述
那编译器底层调用函数的实质是什么呢?
我们通过汇编代码来进行浅略分析:
在这里插入图片描述

以上过程说明函数在声明过程已经定性,因此当声明与定义分离时缺省函数应该在声明时出现

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值