【C++】初识C++(上)

 👑个人主页:啊Q闻       

🎇收录专栏:《C++》           

 🎉我自会去见我的山

💡感谢阅读,欢迎关注,点赞,收藏,评论💡

前言 

这篇博客是对C++的一个初步认识,这个认识是基于C语言的基础上初识C++,C++部分是对C语言设计不合理的地方进行了优化,今天我们就要学习一下。

 一.命名空间

1.为何会出现命名空间?

在用C语言编写代码时,我们有时候会遇到定义两个相同的变量,在同一个域中是不可以定义两个相同的变量的,不同域中可以定义相同的变量名。

例如:全局域中与局部域中均用变量a定义,但是当全局域与局部域中均定义a时,我们打印a是打印哪个a的值呢?

如上结果显示:其打印的是局部域的值。这是因为,打印时,其会先在局部域中寻找,然后再在全局域中查找,所以我们打印的是局部域的值。 

 如果我们要打印全局域的值,又当如何操作呢?

在C++中,如果要打印全局域中的a,我们只要在用::a

变量名的定义会存在冲突,函数名的定义也会存在冲突。不一样的是,函数名的定义冲突是在我们定义的函数与库之间存在重复命名,我们将这种冲突称为命名冲突。

例如:

出现上面情况的原因是:在stdlib.h库中本来就存在rand函数,然而我们又用变量名rand,造成了命名冲突。那该如何让解决呢?总不能让我们了解每个库中存在的函数名,使用变量时进行规避吧?

2.初识命名空间

为了解决上述问题,C++定义出命名空间,使用命名空间的目的就是对标识符的名称进行本地化,以避免命名冲突或名字污染。

定义命名空间,我们要用到关键字namespace,利用namespace+命名空间的名字实现定义。

定义一个命名空间就相当于定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。

如图,利用namespace就不会出现命名冲突了,就相当于你划定一块固定的地方叫aqw,然后在aqw中找寻rand,命名空间的名字可以根据由自己编写。

此外,命名空间可以嵌套,例如:

 打印时,我们查找首先是在局部域中,再在全局域中,最后在命名空间中。

3.命名空间的使用

我们在使用命名空间时,有三种使用方式:

(1)加命名空间名称及作用域限定符

2)使用using将命名空间中某个成员引入 

(3)使用using namespace命名空间名称引入 

二.C++输入输出 

1.C++中,使用cout标准输出对象cin标准输入对象,std是C++标准库的命名空间名,cout和cin的命名空间均为std,其必须包含头文件iostream。

2.endl是标准的C++符号,其表示换行输出,头文件为iostream。

3.<<是流插入运算符,>>是流提取运算符。

4.C++输入输出都不用像C语言,C++不用手动控制输入输出格式,其会自动辨别变量类型。

示例:

 三.缺省参数

1.初识缺省参数

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

2. 缺省参数的分类

缺省参数分为全缺省参数和半缺省参数:

(1)全缺省参数:遵循从左往右传

(2)半缺省参数 :半缺省参数是指缺省一部分,其规定只能从右向左传,且不能跳跃着传。

四.函数重载

1.初识函数重载

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

对于函数重载,其函数名,变量名要相同,返回值不是判断是否为函数重载的必要条件。

1.参数类型不同

 2.参数个数不同

对于参数个数不同的函数重载的情况,有一种情况要注意一下:

缺省参数和无参两种情况构成函数重载,但是其调用时会存在歧义。因为当调用函数时,当不给函数传形参,我们无法确定此时调用的是无参函数?还是调用缺省参数(用的是参数的默认值)?

3.参数类型顺序不同 

2.函数重载原理

为什么C语言不支持函数重载?然而C++支持函数重载?

这是因为,在C语言中,编译器编译后,函数名字的修饰没有发生改变,然而在C++中,会通过函数修饰规则来区分,只要参数不同,修饰出来的函数名字就不同,也就支持了函数重载。

  • 30
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C架构是一种开放源代码的编程语言C++是C语言的扩展,提供了更多的功能和特性。OpenCV是一个开源的计算机视觉库,用于图像处理和机器视觉领域。结构光是一种用于三维形状重建和深度感知的技术。 在引用中,提供了一个使用OpenCV的C++程序示例。该程序读取一张图片,并在窗口中显示出来。它使用了OpenCV的图像处理和显示函数。 引用中提到了一个C项目的文件结构示例。在这个示例中,需要编译两个cpp文件,同时注意到一个头文件位于项目的include目录下。编译这个项目的命令是使用g编译器,指定-I参数来指定头文件的路径,并指定编译的cpp文件,最后生成可执行文件。 引用提供了一个简单的C++程序示例,只包含一个cpp文件。这个程序直接使用g编译器编译为一个可执行文件。 所以,C++和OpenCV可以用于编写结构光相关的程序,用于处理图像和进行三维形状重建。在编写C++程序时,需要注意文件结构和编译命令的设置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [初识openCV & VS编译C++项目](https://blog.csdn.net/Morejay/article/details/128515728)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值