| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> c + + 入门 (上篇) -> 正文阅读 |
|
[C++知识库]c + + 入门 (上篇) |
目录 前言? ? ? ? C++是在C的基础之上,补充了C语言语法的不足,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等,下面我们一起来看看吧。 ?一.命名空间? ? ? ? 首先我们要知道为什么会有命名空间这个概念呢?在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化, 以避免命名冲突或名字污染,因为在C语言中没办法解决类似这样的命名冲突问题,所以在C++中提出了 namespace? 来解决。 1.命名空间的定义????????定义命名空间,需要使用到? namespace? 这个关键字,后面跟上命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员,这些成员都是属于全局的。 ? ? ? ? 命名空间中可以定义变量,函数和类型,还可以嵌套使用。如果同一个工程中允许存在多个相同名称的命名空间,那么编译器最后会合成到同一个命名空间中。
注:一个命名空间就定义了一个新的作用域,命名空间中的所有的内容都局限于该命名空间中。 2.命名空间的使用? ? ? ? 那么命名空间中的成员该如何使用呢? ? ? ? ? 在这里可以把 namespace 比喻成一堵围墙,被他封装的内容就被这堵围墙牢牢挡住,外面人是看不到的。只有通过特定的方式才可以使用到 namespace 里面的内容。 ????????命名空间的使用有三种方式:? ? ?
第三种方式使用起来比较方便,但可能会有点弊端,那么弊端是什么呢?这种就相当于是把墙给拆了,把设定的内容给暴露出来了,可能会引起命名冲突。 二.C++输入&输出? ? ? ? 每一个新事物诞生都会用自己独特的方式向这个世界打招呼,C++也不例外,我们来看下C++是如何来实现问候的。
说明: ????????1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件 以及按命名空间使用方法使用std。 ????????2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含< iostream >头文件中。 ????????3. <<是流插入运算符 ,>>是流提取运算符。 ????????4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。 C++的输入输出可以自动识别变量类型。 三.缺省参数1.缺省参数的概念????????缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
2.缺省参数的分类
注: 1. 半缺省参数必须从右往左依次来给出,不能间隔着给 2. 缺省参数不能在函数声明和定义中同时出现(一般都是在声明里出现缺省参数,定义里出现会报错)
3. 缺省值必须是常量或者全局变量 4. C语言不支持(编译器不支持) 四.函数重载????????自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。 1.函数重载概念? ? ? ? 是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型 不同的问题。
2. C++支持函数重载的原理--名字修饰????????为什么C++支持函数重载,而C语言不支持函数重载呢? ???????? 在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接。实际项目通常是由多个头文件和多个源文件构成,我们可以知道,【当a.cpp中调用了b.cpp中定义的Add函数时】,编译后链接前,a.o的目标文件中没有Add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址在b.o中。那么怎么办呢? ? ????????所以链接阶段就是专门处理这种问题,链接器看到a.o调用Add,但是没有Add的地址,就会到b.o的符号表中找Add的地址,然后链接到一起。那么链接时,面对Add函数,链接接器会使用哪个名字去找呢?这里每个编译器都有自己的函数名修饰规则。由于Windows下vs的修饰规则过于复杂,而Linux下g++的修饰规则简单易懂。在linux下,采用gcc编译完成后,函数名字的修饰没有发生改变。采用g++编译完成后,函数名字的修饰发生改变,编译器将函数参数类型信息添加到修改后的名字中。g++的函数修饰后变成【_Z+函数长度 +函数名+类型首字母】。 ????????通过这里就理解了C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。 2.C++支持函数重载的好处? ? ? ? 我们只需要将重名函数中的参数修改成不一样的,这样在使用的时候就只需根据自己的需要修改参数即可,而无需修改函数名。比如swap函数:在C语言中我们使用的时候一个函数名只能是一种类型进行交换,需要进行第二种类型交换时,还需要在重新定义一个新的函数名。在C++中可以函数名相同,只需要将参数修改即可使用,使用的时候一个函数两种用法还是比较爽的。 3.函数重载的一些注意事项
那么内容就先到这里,请期待后面的文章。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 9:41:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |