| |
|
开发:
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++Prime Plus(2) -> 正文阅读 |
|
[C++知识库]C++Prime Plus(2) |
目录
21.for循环(1)for循环作用:指定某段程序执行指定次数 格式:
使用for访问字符串:字符串可以用字符数组,string类或指向字符的指针表示。 在C++11中,为了处理循环变量无规律变化的情况,新增了范围for; 22.for循环(2)在for循环中,常用 + +运算符和 - -运算符,这是两个一元运算符;
两个运算符有前缀和后缀区别:表达式的值不同,前缀的表达式结果是运算对象本身,后缀的表达式是修改前的运算对象值; 逗号表达式:在只允许出现一个表达式的地方放多个表达式。 字符串比较 23.while循环当循环次数不确定时,我们通常使用while循环。 格式:
对于输入一个单词: 对于输入一行:
以回车字符或达到数组规模结束输入,区别:getline将回车的换行符丢弃,get会将换行符留在缓冲区放在下一次输入的最开始位置。 上面示例,我们用while循环访问字符串效率高于使用for,因为for循环需要结束条件(需要计算字符串长度strlen(),其中strlen()函数其实是已经遍历了一次字符串才知道长度的,所以for循环相当于遍历字符串两次,而while则是一次); 示例:回显输入的字符并统计输入的字符数(进一步认识cin和输入队列或输入缓冲区) 因此在上面示例中,我们虽然已经输入了 当我们回车后,程序开始读输入队列,我们使用cin去读输入,cin的特点是以空格符和回车符作为每次的分隔(cin每次读到空格或者回车都会自动过滤这两种字符)。因此cin读到char中的字符是不会存在空格符和回车符的。当cin读 完整回显式的解决方案: 因此,修改为: 由于 EOF的输入:Unix系统:Ctrl+D,Dos系统(Win):Ctrl+z 24.do while循环先执行循环体,再判断循环条件表达式。格式:
25.二维数组与嵌套循环二维数组:一维数组的数组 26.if语句第一种:if 后为then子句; 第二种:if条件不满足时,由else子句执行; 27.逻辑表达式前面的那些表达式:比较谁大谁小,是否相等,这些是关系表达式。为了处理更复杂的条件,我们应使用逻辑表达式。 对于逻辑表达式的运算对象:0表示false,非0表示true,不同于bool类型。 bool类型:表示逻辑”真”和”假”,bool类型的值(true和false) 注意以下次序问题:a为非0,即true,对于||,有一个为true,结果就为true,所以后面的b+=a就不会计算,因此b不是8而是3。 28.条件表达式
29.switch语句if语句和条件表达式只有两个分支,为了处理多个分支,我们应该使用switch语句 示例:菜单选择 30.文件概念文件是存储在外存储器中的数据集合,程序运行时可以从文件中获取信息,不一定要从键盘输入。 C++将文件看成是一串流动的数据,称为数据流,从外围设备流入程序的数据称为输入流,从程序流向外围设备的数据称为输出流,每个数据流表示为一个对象。 C++将控制台输入输出看成是一个文本文件: 比如: 31.文本文件的输入输出根据上一节的内容,我们需要遵循以下流程: 示例:写文件 32.函数详解(1)回顾函数定义: 33.函数详解(2)参数传递C++中,参数传递的默认方式为值传递(将数值传给函数) 函数中创建形式参数,为形式参数分配空间,将实际参数作为初值。 34.函数详解(3)数组传递数组传递:函数的参数是一组同类变量; 示例:
用指针形式使得数组参数的处理更灵活,比如我们要求从第3个元素开始的元素之和:
数组传递中传递的是数组的起始地址,不需要像值传递中需要为所有对象开辟空间,所以数组传递更节省空间; 示例:输入,修改,显示数组 实际上,函数的参数传递是将实际参数拷贝到形式参数上,由于数组传递拷贝的是地址,这导致地址下的内容确实被修改了,而值传递就不会受到影响,被修改的只是拷贝的值,在函数退出后,该拷贝值就自动被栈回收了。 35.函数详解(4)C风格字符串C风格的字符串是用字符数组表示,注意最后有结束符 字符串传递,由于有结束符这个特点; 示例: 注意指针指向的空间必须是离开函数后依然可用的,该空间不应该来自局部自动变量,所以我们通常用动态内存来实现。 因为,如果只返回一个指针,我们只能返回该指针的地址,函数退出后,地址对应的内容已经被回收(如果是局部自动变量)。 示例: 36.递归概念适用条件:求解一个问题时,需要用到同类问题的解。此时可以通过调用自身获得同类问题的解。比如汉诺塔问题。 递归函数必须满足两个特点:1.调用自身;2.有终止条件。
递归函数的示例: 37.函数指针前面我们知道,对于变量,我们可以通过变量名直接访问,也可以利用指针间接访问。 定义指向函数的指针:
注意:我们必须在 为什么我们要这么麻烦地用指针间接调用函数?因为我们可以将指向函数的指针作为函数的参数。 例如: 38.内联函数在C语言发展到C++后,新增了一类函数,叫内联函数。 针对简单的函数,传统的调用反而开销相对过大,所以我们应该使用内联函数。 格式: 示例: 39.引用变量引用变量实际上是变量的别名;
用途 引用传递的示例: 引用返回(返回一个引用变量)
函数最后返回的必须是一个变量名(所以不可以返回非变量名的表达式); 40.函数参数的默认值对于某些函数,程序往往会用一些固定的值去调用它; C++在定义或声明函数时可以为函数的某个参数指定默认值,当调用函数时没有为它指定实际参数时,系统自动将默认值赋给形式参数。 默认值参数都必须放在参数列表的最后。 41.函数重载一组同名函数,比如: 42.函数模板(1)定义与使用当我们处理不同相似类型的数据时(比如对int和double都只要执行相同的处理过程),结果需要写两个重载函数,比较麻烦,所以C++提出函数模板; 在函数模板中,用参数表示函数中的变量类型,调用时,用具体的类型代入,形成一个真正的函数。 作用:实现通用函数 示例:
比如: 43.函数模板(2)函数模板的重载函数模板的重载:一组同名的函数模板,注意重载函数模板必须有不同的函数特征标; 44.函数模板(3)模板的具体化函数模板是泛型编程(处理过程相同,只是数据类型不同)的实现方式。 有时候,为了缩小泛型编程的范围,我们可以在定义函数模板时,就对模板进行具体的实例化(模板特化)。 编译器在调用函数时: 示例: 45.多文件程序之前的程序都是仅基于一个源文件,实际项目通常很大,我们应该使用多文件程序。 程序是函数组成的,函数数量不多时,可以用一个源文存放。函数数量很多时,可以分别放在多个文件中。 文件分类 每个源文件包含一组函数,源文件划分通常遵循以下习惯: 多个源文件的程序,如果一个源文件A中的函数需要调用另一个源文件B中的函数f,需要在A中声明函数f; 注意到两个cpp都包含了头文件,在链接两个源文件时,会出现重复声明的情况,为了避免重复声明,我们需要使用头文件保护符: 事实上,在避免包含多次声明问题上,常有两种做法:
46.多文件的编译和链接在不同环境下,有不同的方式实现编译和链接。 在命令行界面下,通常我们使用: 比如在UNIX中,如果安装了C语言编译器cc,现在一个项目包含两个源文件,我们可以用以下方式编译链接:
47.变量的作用域C++中,变量有两个性质:作用域和存储持续性 作用域:程序中可以使用该变量的区域,可以是一个复合语句,函数,源文件或整个程序; 存储持续性:变量在内存中保留多长时间。 注意区分两个特性:作用域只是描述程序可以使用变量的区域,持续性是描述变量在内存中何时被回收。 作用域分为两种:块作用域和文件作用域 块作用域:一个复合语句内或函数内部声明的变量,包括函数的形式参数,从定义开始到该复合语句或函数结束。 文件作用域:声明函数外的变量,从定义开始到文件末尾有效。 全局作用域 或 程序作用域:可以被本程序的其他函数或文件使用的文件作用域变量; 作用域是程序的一个区域,一般来说有三个地方可以定义变量: 作用域示例: 48.变量的存储持续性(1)-自动持续性存储持续性描述变量在内存中保留的时间。
在定义时生成,所在块或函数执行结束后被回收; 循环或if语句即使没有括号也是一个块,也可以定义自动变量; 示例: 49.变量地存储持续性(2)-静态持续性静态变量:当程序运行结束变量才被回收,静态变量一旦生成,在整个程序运行期间都存在。 对于静态变量,如果定义时没有指定初值,编译器会将值设为0; 静态变量有三种: 外部链接 内部链接 cin.get的重载: 50.命名空间名字空间的用途:防止名字的冲突。 局部变量:不同的函数可以有同名的局部变量。 成员名:不同的结构,类中可以有同名的成员。 不允许同名的情况:全局变量,函数,类。 名字空间:声明名称的区域,一个名字空间中的名字不会与另一个名字空间中的名字冲突。 创建名字空间:
比如:
比如:
作用:将该成员加入到当前作用域,在此作用域中引用该成员不需要加名字空间名的限定。
作用:将该名字空间的成员加入到当前作用域,在此作用域中引用该名字空间的成员不需要加名字空间名的限定。 |
|
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 20:22:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |