| |
|
开发:
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++快速入门 |
目录1.前言 1.前言本文主要对于C++的一些特性进行简单介绍,旨在对于C++基于C语言添加的功能及特性进行快速入门2.C++关键字相比于C语言的32个关键字,C++的关键字加至63个,很大程度上拓展了C语言的功能。 3.命名空间在C/C++中,变量,函数和类都是大量存在的。这些变量,函数,类都存在于全局作用域中,可能导致很多冲突。举个例子,我们的命名的变量跟库里的变量名,函数名冲突了。就会导致重命名的问题。在实际大型项目的开发中,还存在同事之间定义的变量/函数/类型命名冲突的情况。 比如说,在头文件<stdlib.h>中包含了一个计算两数较大值的宏max,而我不知道<stdlib.h>里面包含了这个宏,我又恰好引用了<stdlib.h>,同时写了一个名为max的函数。悲催的一幕发生了,编译器始终提示我定义函数max的那一行有重命名的错误,我却死活搞不懂到底怎么回事。。。。。。 为了对标识符的名称进行本地化,以避免命名冲突和名字污染,namespace便应运而生了。 3.1.命名空间的定义我们刚刚提到C++有63个关键字,几乎比C语言多了一倍。那么,我们就来看看其中新增的一个关键字——namespace吧! 定义命名空间,我们就需要用到namespace关键字,后面跟命名空间的名字。然后接一对{}即可。{}中包含的即为命名空间的成员。 比如说,我和小许合作开发一款社交软件,我们都在自己的文件里定义了全局变量cq。那在链接的过程中,就会报重命名的错误。于是,我们只好采用不同的命名空间来定义我们各自的cq变量啦! 我们在全局定义了命名空间C1和C2:
不仅如此,我们还可以在命名空间里定义其他任意类型的变量以及函数:
甚至还可以嵌套定义命名空间:
最后,同一个工程中允许存在多个相同名称的命名空间,编译器会最后合成到同一个命名空间中。
好了,我们定义了各自的命名空间里定义了各自的cq,那用的时候怎么引用cq变量呢? 3.2.命名空间的使用今有命名空间N
我们有三种方法来使用命名空间N中定义的变量
4.C++的输入和输出初识一门新语言,我们按老规矩办事!
于是,
注意:
5.缺省参数备胎,就是给汽车准备一个备用轮胎,一旦那个轮子爆胎或者出了问题,备用轮胎就方便及时地取而代之,汽车就不至于中途抛锚。 顾名思义,这“感情备胎”就是给自己在感情的归宿上像轮胎一样,有多一个甚至多个备份,“感情备胎”一般多指爱情。 悄悄告诉你, 5.1.缺省参数的概念缺省参数是指在声明或定义函数时给函数的参数指定一个 在调用该函数时,如果没有指定实参,就采用这个默认值,否则就采用实参。 比如说,我们希望malloc/realloc有默认开辟的大小。在希望使用默认值的时候缺省参数,不希望的时候传一个自己想要的参数。 我们拿出以前写过的栈的数据空间的初始化以及增容的代码:
这里,我们让栈的data的元素数量默认是4,但是如果你想要让它是8或者16的时候,多传一个参数就行了! 5.2.缺省参数的分类缺省参数可以分成全缺省参数和半缺省参数
5.3.缺省参数的注意点
6.函数重载自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。 学校期末考试考完了,出考场后: 学霸:“考试完了。” 嘿嘿,虽然这两句话读起来一样,但表达的意思可不一样哦! C++里面也有一函数多义的情况! 6.1.函数重载的概念函数重载:是函数的一种特殊情况,C++允许在
6.2.函数重载的注意点请特别注意,返回值不同,函数名及参数相同的函数不能重载!
这就不属于函数重载 6.3.为什么C++支持函数重载------名字修饰我们说函数重载是C语言不具有的功能,而C++添加了这个功能? 函数重载究竟是怎么实现的呢? 这就要从我们的底层函数调用讲起了 让我们尤其来关注 那么编译器根据什么去寻找函数的呢? 我们在Linux下分别使用gcc和g++编译器看一下文件 我们来看C语言编译器gcc编译链接后的结果: 我们可以看到,gcc编译器的函数名修饰只与函数名本身有关而与函数参数无关,所以C语言不支持函数重载,因为即使重载了你也无法让编译器去通过参数的不同在链接时找到不同的函数!
这样参数不同的同名函数在符号表中被修饰成了不同的符号,这就能在链接时轻松找到不同函数了! 6.4.小结通过这里就理解了C语言没办法支持重载,因为同名函数没办法区分。 而C++是通过函数修饰规则来区 分,只要参数不同,修饰出来的名字就不一样,就支持了重载。 另外我们也理解了,为什么函数重载要求参数不同!而跟返回值没关系。 7.extern “C”C++编译器能识别C++函数名修饰规则,也能识别C函数名的修饰规则 有的时候,在C++工程中可能需要将某些函数按C的风格编译,那么,我们只要在函数前面加 请注意, 8.引用8.1.引用的概念先看一段代码:
这里,ra就是a的引用。 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 比如,特朗普本名唐纳德·特朗普,但在中国,被叫做懂王,懂王就是他的别名
8.2.引用的特性
ra = b;并不是让ra从a的引用变成b的引用,而是将b赋值给ra 8.3.常引用首先我们提一句话: 引用时,别名的权限能够减小或者不变,但不能放大
所以引用前加const的好处是:
8.4.引用做参数
8.5.引用做返回值先看一段错误的代码
运行结果是7. 于是,我们假设临时变量的地址为0x8822ff44,第一次该地址上的值被置为3 9.内联函数9.1.概念在C++中,内联函数被用来替代宏函数
以inline修饰的函数叫内联函数,编译时C++编译器会在调用函数的地方展开,没有建立栈帧的开销,提升了程序运行的效率。 9.2.特性
10.auto关键字(C++11)来看这样一段代码:
auto关键字帮助我们通过右边的赋值,自动判断左边声明的变量的类型 优点:简化了代码 我们可以通过打印 typeid(变量).name() 来查看变量的类型 请注意:
auto不能用来声明数组,因为编译器不知道要申请多少字节的空间,后面的 3 究竟是short还是int还是long long? 11.范围for对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。 因此C++11中 引入了基于范围的for循环。for循环后的括号由冒号“ :”分为两部分: 注意:for循环迭代的范围必须是确定的
12.nullptr好的编程习惯应该是,在声明一个变量的时候,给它赋一个合适的初值。
NULL在C语言里是空指针,值为 而我们看到C的头文件<stddef.h>内,有这样一段代码,告诉我们NULL其实是一个宏:
这段代码告诉我们,我们用C编译器,NULL就是0处的地址;用C++编译器,NULL就是一个字面常量0,没有指针的属性 以下情况下,NULL的使用就会产生麻烦:NULL被当作int 类型的0,而不是0x00000000
于是,C++11引入了新关键字
|
|
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 23:45:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |