C++入门(上)

本文详细讲述了C++编程中遇到的命名冲突问题,介绍了如何通过命名空间、库冲突处理、缺省参数和函数重载的概念来解决这些问题。还讨论了流插入和提取操作以及函数重载的具体规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.C语言命名冲突问题

与C语言不同的是C++添加源文件的后缀是cpp

C++是兼容C语言的用C语言的语法可以在C++上运行

用C++语法来运行

我们知道c++是来补充c语言不足的地方

这个程序在没包头文件之前是可以正常运行的

当我包含头文件#include<stdlib.h>的时候程序就运行失败

原因是出现命名冲突的问题

冲突分三种:库,我和项目组同事

1.库:官方库和C++库

跟库冲突解决办法把名字稍微更改一下

2.我和项目组同事的名字冲突

解决办法只能让另外一个人把名字改一下

1.2C++命名空间

C++就提出命名空间来解决C语言命名冲突的问题

namespace std(局部)

std是C++标准库的命名空间,C++中所有的东西都会放到这个命名空间里

避免两个人定义的东西冲突

这里rand访问有两种方式:

1.访问stdlib库里面的rand,库里面rand访问要加p指针

2.访问命名空间里面的rand,命名空间的访问要加名称域作用限定符::

std :: rand

1.2命名空间的定义

命名空间里面什么都可以定义函数结构变量

函数的调用

如果这个函数不加std::会出错,因为函数在默认情况下会去全局查找

不会自己到命名空间里面查找

结构体的调用

这里要注意的是std::不能放在struct的前面这种写法是错误的,因为定义的Node而不是strcut

现在即使在命名空间外定义相同函数变量的名称也不存在

因为名字相同而导致的命名冲突问题

1.3展开命名空间

using namespace std (公共)

每次打印这个函数都要写域限定太麻烦了,这时我们就可以用展开命名空间

默认情况不会去命名空间找定义,现在展开命名空间就可以去找定义了

展开命名空间很危险

这样会导致编译器不知道去库里面找还是去命名空间里面找

哪怎么办呢?

可以用部分展开的方式来解决

using std:: Add(部分)

这样就不会导致全部展开出现冲突的风险

1.4命名空间嵌套使用

如果我还要定义一个rand这时就可以嵌套使用

打印的话就在std基础上在定义

通过上述的讲解

我们就能很轻松解释下面的代码

出错的原因是cout 和endl都定义在iostream头文件中

头文件里面是把这些都封装到namespace std命名空间中

默认情况下不会去命名空间找,就报错不认cout和endl

解决办法有4种:

1.展开命名空间

2.局部展开授权

3.快捷方式

4.cin>>

注意:头文件的展开是把头文件的内容拷贝过来

            命名空间的展开是命名空间的授权

命名空间同名会自动合并

1.5<<流插入和提取>>

i是in输入数据,o是out输出数据

cout里c是控制台的意思Console,out输出控制台输出

<<流插入运算符

endl换行符,也可以写成\n

cin里c也是控制台的意思console,in输入控制台出入

>>流提取

C++使用cout和cin的好处是可以自动识别类型

不像之前写c语言的时候打印或者输入都要带类型

如果想控制小数点精度就用c语言因为c和c++可以混着使用

用c++会很麻烦

需要注意的是有的很老的编译包头文件会出现这种情况

下载新的编译器不能这样使用

二.缺省参数

2.1默认缺省参数

当我们调用第一个函数Fun=2传参数时,int a 就等于2这时1就不用了

调用第二个函数Fun = 0不传参数时,int a 就等于1

函数传参数就数不用a自用传的参己的值,如果函数没有传参数就用a自己的值

这里的a就是缺省参数默认参数

2.2全缺省参数

可以传1个2个3个也,能灵活可以不传使用

如果传1个参数是默认传给第一个的,不能传给第2个和第3个

显示传参从左往右显示传参

2.3半缺省

不能不传参数,至少传一个参数

必须从右往左给缺省值

不然会报错

缺省参数的声明和定义不能分离

如果分离你在定义和声明各给一个缺省值

编译器就不知道用哪一个缺省值

非要的分离的话不能同时给,声明给定义不给

三.函数重载

通俗理解就是一词多义

在c语言中不准许同名函数

c++可以要求构成函数重载

构成函数重载的要求

1.同一个作用域;

2.函数名称相同;

3.函数参数类型

4.参数个数不同

5.参数类型顺序不同

3.1参数类型不同 

构成函数重载,会自动匹配类型不需要我们输入类型的打印符号了

输出结果

在c语言中函数名必须要不同不然会报错

3.2参数个数不同

3.3参数类型顺序不同

必须是类型不同,而不是参数

函数返回类型不同是构成不了函数重载的

想让函数返回类型不同构成函数重载

函数参数的类型必须不同

3.4在同一个作用域

这种情况是不构成函数重载的

因为不在同一个作用域内

哪有人就会问了,不是函数重载为什么不报错呢?

他们不在同一个作用域,即使名字和参数类型相同也不会报错

这种情况就会报错

还有一种情况要注意

函数重载和半缺省结合

当函数传参传2个值的时候调用第二个函数正常运行

因为第二个函数有2个函数参数a和b,而第一个函数只有一个参数

当传1个参数就会发生调用歧义

因为第一个函数有缺省参数,第二个函数也有缺省参数

编译器不知道调用哪一个就会发生歧义

本小节结束,点个赞和关注吧!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值