C++入门:命名空间namespace,cin,cout,缺省参数,函数的重载

namespace本质上是定义了一个命名空间域

通过创建命名空间域可以预防变量的冲突问题

命名冲突时,编译器会首先从局部中找,然后从全局中找,但是不会从命名空间中找

eg.

::符号和命名空间

:: 是域作用限定符

就可以访问namespace bit中的rand了,否则就默认找局部或全局的rand

调用命名空间中的结构体

命名空间中可以定义变量,函数等,也可以定义其他命名空间

对于不同头文件来说,可以设置相同名字的命名空间,他们会自动合成成一个命名空间

但是两个头文件中不能有同名的函数(因为在同一个域内)

展开命名空间

对于命名空间中的封装的内容,不能省略前缀xx::xx

如果要省略,必须using namespace(展开命名空间)

之后使用的内容就会首先从局部中找,然后同时从全局中找和命名空间中找

对于某个使用频率较高的内容,可以单独展开某一个

eg.

cin,cout

cin和cout被包含于c++的库的命名空间(std)中,因此在使用他们时需要加前缀std::

但是cin和cout的使用频率很高,为了方便,可以using namespace std来省略std::

或者指定展开cin和cout

using std::cout
using std::cin
using std::endl

但是cin和cout的效率要比printf和scanf低一点

缺省参数

在函数设置形参时可以赋值,如果调用该函数时没有传参,则会用缺省参数初始化,

如果正常传参,就用传入的参数初始化

缺省参数可以有多个

eg.

全缺省

半缺省

规定只能从右往左缺省,也不能跳跃着缺省

此时函数的调用就有很多中方式了

但是函数传参必须按顺序传入,不能跳过前面的参数直接传入后面的参数

缺省参数不能同时声明和定义,缺省参数最好在声明时给

函数的重载

对于c语言,在同一作用域中不允许同名的函数同时存在,否则函数名会冲突

但是在c++中,在同一作用域中可以存在同名的函数,叫做函数的重载

但是,函数的重载要求函数的参数不同(类型,数量)(返回值不同不构成函数的重载)

在调用函数时,编译器会根据传入参数的个数或类型来调用相应的函数

C++支持函数重载的原因

调用函数的本质是调用函数的地址(函数中执行的首个语句的地址(类似于数组的地址))

当包含头文件和源文件时,编译器执行程序时,先展开头文件,经过一定流程,然后检查语法,生成汇编代码,但此时由于头文件中只有函数的声明,没有定义,所以无法找到函数的地址(首个语句的地址)

因此需要在编译器进行链接时查找函数的地址

在编译器进行链接时,

c语言直接用函数的名字去查找函数

c++直接用修饰(参数的类型,个数等)后的函数的名字去查找

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值