C++入门知识

命名空间的引入

C语言的缺陷以及C++的解决。

看下面这个代码:

这里进行了报错。

这里包含rand所在的头文件,然后头文件会进行展开。然后头文件里的rand和全局变量rand就会发生冲突。

这个就叫做命名冲突

因此C++引入了一个解决办法

namespace,就是这个把变量、函数、类型(结构体)来封装到命名空间里面。

我们来命名一个命名空间,把rand封装到里面。

这里打印的结果是访问的全局变量中的那个。

这里有两个rand的存在能同时发生是因为他们作用在不同的作用域中。

但是全局变量和局部变量如果优先访问的话实现访问局部的,再访问整体的。

那如果我们想要直接访问全局变量,那就要引入::,::也叫预作用限定符。

 那我们想访问命名空间里面的变量呢?

 用变量或者函数在编译默认查找时,默认先局部作用域,再全局作用域,这里默认不会到命名空间里面找。

命名空间里面除了定义变量,还可以定义类型和函数。

这里函数跟变量是一样的,这里再演示一下结构体类型。

 命名空间可以实现嵌套,可以命名空间套命名空间。

总结:命名空间可以定义变量、类型和函数,命名空间也可以嵌套命名空间。一个命名空间是新建立了一个作用域,默认情况下是不会查找的。

多个文件里面可以定义同名的命名空间,同名的命名空间他会进行合并。如果合并的里面有同一个变量怎么办,合并了以后就是同一个域,同一个域里面是不能有同名的,也就是他们准确来说如果这样发生冲突,那他们就不能定义在同一个命名空间。

这里其实再继续嵌套命名空间也可以解决。

命名空间调,比如想调用一个命名空间里面的一个函数多次,那就太麻烦了。因此这里引入了

误区:展开命名空间并不是展开头文件。 展开头文件的意思是在预处理阶段把头文件都拷贝过来。命名空间是一个域,展开命名空间是影响编译器的查找规则。即展开后,编译时就可以访问这个变量了。

展开命名空间后,即使不指定调用哪一个命名空间里的值,他也不会报错。展开其实这里理解加了一个声明。但是展开命名空间有一个问题。如果别人也有这个值,就会出现这个问题。

  下面是对访问的一些现象。

上面是用的全局的,后面是命名空间里面。不同的域里面是可以用同名的。

这里其实就是全局和命名空间的比较访问先后。

但是如果我们把全局那里也放到一个命名空间里面,那这个时候就会出现错误了。

结论:命名空间尽量不能随意展开。展开命名空间不是拷贝头文件,是一个声明。

其实这里可以展开命名空间一个单独的变量、类型或者函数。

命名空间其实总结下来也就3中访问方式:1.指定访问,但是重复访问麻烦。2.全部展开,这样做不太好。3.只展开其中的一个,哪一个常用就展开哪一个。

局部域和全局域会影响生命周期,命名空间域不会影响生命周期。这里解释一下:

下图的x和y还是全局变量,只不过用命名空间把名字进行了隔离,就是被人也可以定义。

局部域和全局域在分别完成了自己的进程后就进行结束,因而影响声明周期,而命名空间域不会影响声明周期。

 C++的新输入新输出的引入。

但是把命名空间都展开不好,这里也可以指定进行展开。 

std是库的命名空间.

灵活运用c或者c++的输入输出。

缺省参数的引入

缺省参数的意思就是在形参的后面给定一个值。

如果传递了实参,那么这个形参后面的值没什么用,但是如果实参没有传值,那么就会用形参后面的这个值即缺省值。

缺省参数可以有多个。但是实参传递时,不能跳跃传,必须按规定顺序传递。

上图的test2为全缺省,半缺省就是缺省一部分,只能从右向左缺省。

 要注意的点:缺省参数不能声明和定义同时给。缺省参数在声明给。

2024.3.30更新

 函数重载的引入

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

 

 

 展开命名空间不是将他放到全局了,展开就其实相当于放了个信标,就类似一个声明。

只有同一个域才会有重载关系。

声明一点:调用歧义和函数重载是不同的概念。 

问题:C语言为什么不支持重载,C++为什么又支持重载。 

 一个工程的文件要运行起来必须经历的过程。

这里就简单一代而过:

引用的引入

引用的基本作用体现以下图来展现:

 &在定义时是引用,在其他时候还是取地址的意思。

 

这里也用了顺序表在某些C语言书中也进行了引用。

 对指针变量进行取别名

链表中对引用的利用

1.不用引用时。

 2.利用了引用

3.有些学校的写法

 引用的特性

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

2.一个变量可以有多个引用

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

 指针引用的一些点。

那如何可以呢?在引用前加一个const修饰符即可,用来防止权限的放大。这样就成了权限的平移。

  权限的缩小

 那这里如果y++,那么z会不会改变,是会的。这里只是x的值不能通过z来进行改变,因为z的权限仅仅是只读,但是y是可读可写的,因为y和z都是x的别名,所以通过y是可以改变他们的。

 下图这样是可以的,它仅仅是把a的值赋值给了变量c

下图也是一种权限的放大

这里p1可以进行修改,而const修饰的*p1是不能进行修改的,这是c语言的知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值