
C++PrimerPlus
文章平均质量分 80
被誉为“开发人员学习C++的必备教程,没有之一”,可以说是一本面向从未学习过C语言甚至是从未学习过编程的人的入门书籍,它的首章从基础内容讲起,先介绍了传统编程的规则,后面才着重讲解有关面向对象C++的精髓之一的有关内容。
香香家的臭臭
这个作者很懒,什么都没留下…
展开
-
C++PrimerPlus 附录D 运算符优先级
运算符优先级决定了运算符用于值的顺序。C++运算符分为18个优先级组,如下表所示。第1组中的运算符的优先级最高,第2组中运算符的优先级次之,依此类推。如果两个运算符被用于同一个操作数,则首先应用优先级高的运算符。如果两个运算符的优先级相同,则C++使用结合性规则来决定哪个运算符结合更为紧密。同一组中运算符的优先级和结合性相同,不管是从左到右(表中L-R)还是从右到左(表中R-L)结合。从左到右的结合性意味着首先应用最左边的运算符,而从右到左的结合性则意味着首先应用最右边的运算符。C++运算符的优..原创 2022-04-23 10:00:00 · 451 阅读 · 0 评论 -
C++PrimerPlus 附录C ASCII字符集
附录C ASCII字符集计算机使用数字代码来存储字符。ASCII码是美国最常用的编码,它是Unicode的一个子集(一个非常小的子集)。C++使得能够直接表示大多数字符,方法是将字符用单引号括起,例如 ‘A’ 表示字符A。也可以用前面带反斜杠的八进制或十六进制编码来表示单个字符,例如, ‘\012’ 和 ‘\0xa’ 表示的都是换行符(LF)。这种转义序列还可放在字符串中,如“Hello, \012my dear”。下表列出了以各种方式表示的ASCII字符集。在该表中,当被用作前缀时,^字符表示原创 2022-04-22 10:00:00 · 568 阅读 · 0 评论 -
C++PrimerPlus 附录B C++保留字
C++PrimerPlus 附录B C++保留字附录B C++保留字B.1 C++关键字B.2替代标记B.3C++库保留名称B.4有特殊含义的标识符附录B C++保留字C++保留了一些单词供自己和C++库使用。程序员不应将保留字用作声明中的标识符。保留字分三类:关键字、替代标记(alternative token)和C++库保留名称。B.1 C++关键字关键字是组成编程语言词汇表的标识符,它们不能用于其他用途,如用作变量名。下表列出了C++关键字,其中以粗体显示...原创 2022-04-21 10:00:00 · 873 阅读 · 0 评论 -
C++PrimerPlus 附录A 计数系统
C++PrimerPlus 附录A 计数系统附录A 计数系统A.1 十进制数A.2八进制整数A.3十六进制数A.4二进制数A.5二进制和十六进制附录A 计数系统人们使用很多计数系统来表示数字。有些计数系统(如罗马数字)不适合用于算术运算;而印度计数系统经过改进,并传入到欧洲后变成了阿拉伯计数系统,这种数字方便了数学、科学和商业计算。现代的计算机计数系统是基于占位符概念的,使用了最先出现在印度计数系统中的零。然而,这种原理被推广到其他计数系统。因此,虽然在日常生活中...原创 2022-04-20 10:00:00 · 1878 阅读 · 0 评论 -
C++PrimerPlus 第九章 内存模型和名称空间-9.3 名称空间
在C++中,名称可以是变量、函数、结构、枚举、类以及类和结构的成员。当随着项目的增大,名称相互冲突的可能性也将增加。使用多个厂商的类库时,可能导致名称冲突。例如,两个库可能都定义了名为List、Tree和Node的类,但定义的方式不兼容。用户可能希望使用一个库的List类,而使用另一个库的Tree类。这种冲突被称为名称空间问题。C++标准提供了名称空间工具,以便更好地控制名称的作用域。经过了一段时间后,编译器才支持名称空间,但现在这种支持很普遍。原创 2024-05-21 10:49:01 · 854 阅读 · 0 评论 -
C++PrimerPlus 第九章 内存模型和名称空间-9.2 存储持续性、作用域和链接性
C++的存储方案决定了变量保留在内存中的时间(存储持续性)以及程序的哪一部分可以访问它(作用域和链接性)。自动变量是在代码块(如函数体或函数体中的代码块)中定义的变量,仅当程序执行到包含定义的代码块时,它们才存在,并且可见。自动变量可以通过使用存储类型说明符register或根本不使用说明符来声明,没有使用说明符时,变量将默认为自动的。register说明符提示编译器,该变量的使用频率很高,但C++11摒弃了这种用法。原创 2024-05-21 09:57:45 · 1047 阅读 · 0 评论 -
C++PrimerPlus 第九章 内存模型和名称空间-9.1 单独编译
如果文件名包含在尖括号中,则C++编译器将在存储标准头文件的主机系统的文件系统中查找:但如果文件名包含在尖括号中,则编译器将首先查找当前的工作目录或源代码目录(或其他目录,这取决于编译器)。将结构声明放在头文件中是可以的,因为它们不创建变量,而只是在源代码文件中声明结构变量时,告诉编译器如何创建该结构变量。例如,如果在头文件中包含一个函数定义,然后在其他两个文件(属于同一个程序)中包含该头文件,则同一个程序中将包含一个函数的两个定义,除非函数是内联的,否则这将出错。因此,可以将原来的程序分成三部分。原创 2024-05-20 17:15:37 · 1060 阅读 · 0 评论 -
C++PrimerPlus 第八章 函数探幽(编程练习含答案)
C++PrimerPlus 第八章 函数探幽(编程练习含答案)原创 2022-12-19 12:15:53 · 235 阅读 · 1 评论 -
C++PrimerPlus 第八章 函数探幽(编程练习)
C++PrimerPlus 第八章 函数探幽(编程练习)原创 2022-12-19 12:14:59 · 225 阅读 · 0 评论 -
C++PrimerPlus 第八章 函数探幽(复习题含答案)
C++PrimerPlus 第八章 函数探幽(复习题含答案)原创 2022-12-19 12:15:09 · 379 阅读 · 0 评论 -
C++PrimerPlus 第八章 函数探幽(复习题)
C++PrimerPlus 第八章 函数探幽(复习题)原创 2022-12-19 12:14:48 · 403 阅读 · 0 评论 -
C++PrimerPlus 第八章 函数探幽-8.5 函数模板
现在的C++编译器实现了C++新增的一项特性——函数模板。函数模板是通用的函数描述,也就是说,它们使用泛型来定义函数,其中的泛型可用具体的类型(如int或double)替换。通过将类型作为参数传递给模板,可使编译器生成该类型的函数。由于模板允许以泛型(而不是具体类型)的方式编写程序,因此有时也被称为通用编程。由于类型是用参数表示的,因此模板特性有时也被称为参数化类型(parameterized types)。下面介绍为何需要这种特性以及其工作原理。原创 2022-12-19 12:14:26 · 919 阅读 · 0 评论 -
C++PrimerPlus 第八章 函数探幽-8.4 函数重载
函数多态是C++在C语言的基础上新增的功能。默认参数让您能够使用不同数目的参数调用同一个函数,而函数多态(函数重载)让您能够使用多个同名的函数。术语“多态”指的是有多种形式,因此函数多态允许函数可以有多种形式。类似地,术语“函数重载”指的是可以有多个同名的函数,因此对名称进行了重载。这两个术语指的是同一回事,但我们通常使用函数重载。可以通过函数重载来设计一系列函数——它们完成相同的工作,但使用不同的参数列表。原创 2022-12-19 12:13:28 · 460 阅读 · 0 评论 -
C++PrimerPlus 第八章 函数探幽-8.3 默认参数
下面介绍C++的另一种新内容——默认参数,默认参数指的是当函数调用中省略了实参时自动使用的一个值。例如,如果将void wow(int n)设置成n有默认值为1,则函数调用wow()相当于wow(1)。这极大地提高了使用函数的灵活性。假设有一个名为left()的函数,它将字符串和n作为参数,并返回该字符串的前n个字符。更准确地说,该函数返回一个指针,该指针指向由原始字符串中被选中的部分组成的字符串。例如,函数调用left(“theory”, 3)将创建新字符串”the”,并返回一个指向该字符串的指针。现在假原创 2022-12-18 15:57:26 · 404 阅读 · 1 评论 -
C++PrimerPlus 第八章 函数探幽-8.2 引用变量
C++新增了一种复合类型——引用变量。引用是已定义的变量的别名(另一种名称)。例如,如果将twain作为clement变量的引用,则可以交替使用twain和clement来表示该变量。那么,这种别名有何作用呢?是否能帮助那些不知道如何选择变量名的人呢?有可能,但引用变量的主要用途是用作函数的形参。通过将引用变量用作参数,函数将使用原始数据,而不是其副本。这样除指针之外,引用也为函数处理大型结构提供了一种非常方便的途径,同时对于设计类来说,引用也是必不可少的。然而,介绍如何将引用用于函数之前,先介绍一下定义和原创 2022-12-18 15:51:28 · 872 阅读 · 0 评论 -
C++PrimerPlus 第八章 函数探幽-8.1 C++内联函数
内联函数是C++为提高程序运行速度所做的一项改进。常规函数和内联函数之间的主要区别不在于编写方式,而在于C++编译器如何将它们组合到程序中。要了解内联函数与常规函数之间的区别,必须深入到程序内部。原创 2022-12-18 15:34:37 · 664 阅读 · 0 评论 -
C++PrimerPlus 第七章 函数-C++的编程模块(编程练习含答案)
编写一个程序,不断要求用户输入两个数,直到其中的一个为0。对于每两个数,程序将使用一个函数来计算它们调和平均数,并将结果返回给main(),而后者将报告结果。调和平均数指的是倒数平均值的倒数,计算公式如下:调和平均数 = 2.0 * x * y / (x + y)原创 2022-12-18 15:17:34 · 317 阅读 · 0 评论 -
C++PrimerPlus 第七章 函数-C++的编程模块(编程练习)
例如,在这个例子中,中头奖的几率是从47个号码中正确选取5个号码的几率与从27个号码中正确选择1个号码的几率的乘积。如果读者爱冒险,可以尝试创建一个指针数组,其中的指针指向add()样式的函数,并编写一个循环,使用这些指针连续让calculate()调用这些函数。10、设计一个名为calculate()的函数,它接受两个double值和一个指向函数的指针,而被指向的函数接受两个double参数,并返回一个double值。在程序中对该函数进行测试,程序使用循环让用户输入不同的值,程序将报告这些值的阶乘。原创 2022-12-18 15:07:04 · 388 阅读 · 0 评论 -
C++PrimerPlus 第七章 函数-C++的编程模块(复习题含答案)
1、使用函数的3个步骤是什么?这3个步骤是定义函数、提供原型、调用函数。2、请创建与下面的描述匹配的函数原型。a. igor()没有参数,且没有返回值。b. tofu()接受一个int参数,并返回一个float。c. mpg()接受两个double参数,并返回一个double。d. summation()将long数组名和数组长度作为参数,并返回一个long值。e. doctor()接受一个字符串原创 2022-12-18 14:31:32 · 254 阅读 · 0 评论 -
C++PrimerPlus 第七章 函数-C++的编程模块(复习题)
11、函数judge()的返沪类型为int,它将这样一个函数的地址作为参数:将const char指针作为参数,并返回一个int值。4、编写一个接受3个参数的函数:指向数组区间中第一个元素的指针、指向数组区间最后一个元素后面的指针以及一个int值,并将数组中的每个元素都设置为该int值。3、编写一个接受3个参数的函数:int数组名、数组长度和一个int值,并将数组的所有元素都设置为该int值。b. 编写一个函数,它将applicant结构的地址作为参数,并显示该参数指向的结构的内容。”taco”[2]呢?原创 2022-12-18 14:23:05 · 491 阅读 · 0 评论 -
C++PrimerPlus 第七章 函数-C++的编程模块-7.10 函数指针
与数据项相似,函数也有地址。函数的地址是存储其机器语言代码的内存的开始地址。通常,这些地址对用户而言,既不重要,也没有什么用处,但对程序而言,却很有用。例如,可以编写将另一个函数的地址作为参数的函数。这样第一个函数将能够找到第二个函数,并运行它。与直接调用另一个函数相比,这种方法很笨拙,但它允许在不同的时间传递不同函数的地址,这意味着可以在不同的时间使用不同的函数。原创 2022-12-18 14:12:03 · 626 阅读 · 0 评论 -
C++PrimerPlus 第七章 函数-C++的编程模块-7.9 递归
下面介绍一些完全不同的内容。C++函数有一种有趣的特点——可以调用自己(然而,与C语言不同的是,C++不允许main()调用自己),这种功能被称为递归。尽管递归在特定的编程(例如人工智能)中是一种重要的工具,但这里只简单地介绍一下它是如何工作的。原创 2022-12-18 13:58:25 · 665 阅读 · 0 评论 -
C++PrimerPlus 第七章 函数-C++的编程模块-7.8 函数与array对象
由于const array对象Snames是在所有函数之前声明的,因此可后面的任何函数定义中使用它。例如,可按值将对象传递给函数,在这种情况下,函数处理的是原始对象的副本。另外,也可传递指向对象的指针,这让函数能够操作原始对象。函数show()存在的问题是,expenses存储了四个double值,而创建一个新对象并将expenses的值复制到其中的效率太低。在最后一条语句中,pa是一个指向array对象的指针,因此*pa为这种对象,而(*pa)[i]是该对象的一个元素。原创 2022-09-24 10:00:00 · 315 阅读 · 0 评论 -
C++PrimerPlus 第七章 函数-C++的编程模块-7.7 函数和string对象
虽然C-风格字符串和string对象的用途几乎相同,但与数组相比,string对象与结构的更相似。例如,可以将一个结构赋给另一个结构,也可以将一个对象赋给另一个对象。如果需要多个字符串,可以声明一个string对象数组,而不是二维char数组。对于该示例,需要指出的一点是,除函数getline()外,该程序像对待内置类型(如int)一样对待string对象。程序清单7.14提供了一个小型示例,它声明了一个string对象数组,并将该数组传递给一个函数以显示其内容。程序清单7.14 topfive.cpp。原创 2022-09-23 10:00:00 · 294 阅读 · 0 评论 -
C++PrimerPlus 第七章 函数-C++的编程模块-7.6 函数和结构
例如,在程序清单7.12中的循环中,cin期望用户输入两个数字,如果用户输入了q(前面的输出示例就是这样做的),cin>>将知道q不是数字,从而将q留在输入队列中,并返回一个将被转换为false的值,导致循环结束。下面开发用于表示时间值的结构,然后再开发一个函数,它接受两个这样的结构作为参数,并返回表示参数的和的结构。具体地说,这个例子将定义两个结构,用于表示两种不同的描述位置的方法,然后开发一个函数,将一个格式转换为另一种格式,并显示结果。接下来,看一下返回两个这种结构的总和的sum()函数的原型。原创 2022-09-22 10:00:00 · 489 阅读 · 0 评论 -
C++PrimerPlus 第七章 函数-C++的编程模块-7.5 函数和C-风格字符串
C-风格字符串与常规char数组之间的一个重要区别是,字符串有内置的结束字符(前面讲过,包含字符,但不以空值字符结尾的char数组只是数组,而不是字符串)。是的,函数无法返回一个字符串,但可以返回字符串的地址,这样做的效率更高。然后,返回指向新字符串的指针。因此,程序清单7.10中的函数请求分配n+1个字节的内存来存储该字符串,并将最后一个字节设置为空值字符,然后从后向前对数组进行填充。注意,变量pstr的作用域为buildstr函数内,因此该函数结束时,pstr(而不是字符串)使用的内存将被释放。原创 2022-09-21 10:00:00 · 452 阅读 · 3 评论 -
C++PrimerPlus 第七章 函数-C++的编程模块-7.4 函数和二维数组
由于ar2指向数组(它的元素是由4个int组成的数组)的第一个元素(元素0),因此表达式ar2+r指向编号为r的元素。因此ar2[r]是编号为r的元素。将下标用于数组名将得到一个数组元素,因此ar2[r][c]是由4个int组成的数组中的一个元素,是一个int值。为编写将二维数组作为参数的函数,必须牢记,数组名被视为其地址,因此,相应的形参是一个指针,就像一维数组一样。其中的括号是必不可少的,因为下面的声明将声明一个由4个指向int的指针组成的数组,而不是由一个指向由4个int组成的数组的指针;原创 2022-09-20 10:00:00 · 204 阅读 · 0 评论 -
C++PrimerPlus 第七章 函数-C++的编程模块-7.3 函数和数组
目录7.3 函数和数组7.3.1 函数如何使用指针来处理数组7.3.2 将数组作为参数意味着什么?7.3.3 更多数组函数示例7.3.3.1 填充数组7.3.3.2 显示数组及用const保护数组7.3.3.3 修改数组7.3.3.4 将上述代码组合起来7.3.3.5 程序说明7.3.3.6 数组处理函数的常用编写方式7.3.4 使用数组区间的函数7.3.5 指针和const到目前为止,本书的函数示例都很简单,参数和返回值的类型都是基本类型。但是,函数是处理更复杂的类型(如数组和结构)的关键。下面来如何将数原创 2022-09-19 10:00:00 · 664 阅读 · 0 评论 -
C++PrimerPlus 第七章 函数-C++的编程模块-7.2 函数参数和按值传递
前面提到过,这样做有助于确保数据的完整性,这还意味着,如果在main()中声明了一个名为x的变量,同时在另一个函数中也声明了一个名为x的变量,则它们将是两个完全不同的、毫无关系的变量,这与加利福尼亚州的Albany与纽约的Albany是两个完全不同的地方是一样的道理(参见下图)。这样,cube()执行的操作将不会影响main()中的数据,因为cube()使用的是side的副 本,而不是原来的数据。选择6个数时,分母为前6个整数的乘积或6的阶乘,分子也是6个连续整数的乘积,从51开始,依次减1。原创 2022-09-18 10:00:00 · 522 阅读 · 0 评论 -
C++PrimerPlus 第七章 函数-C++的编程模块-7.1 复习函数的基本知识
可以将函数分成两类:没有返回值的函数和有返回值的函数。没有返回值的函数被称为void函数,其通用格式如下:{}其中,parameterList指定了传递给函数的参数类型和数量,本章后面将更详细地介绍该列表。可选的返回语句标记了函数的结尾;否则,函数将在右花括号处结束。void函数相当于Pascal中的过程、FORTRAN中的子程序和现代BASIC中的子程序过程。通常,可以用void函数来执行某种操作。例如,将Cheers!打印指定次数(n)的函数如下:{i < n;i++)”;}原创 2022-09-17 14:25:27 · 493 阅读 · 0 评论 -
C++PrimerPlus 第六章 分支语句和逻辑运算符(编程练习含答案)
C++PrimerPlus 第六章 分支语句和逻辑运算符(编程练习含答案)原创 2022-07-31 10:00:00 · 529 阅读 · 0 评论 -
C++PrimerPlus 第六章 分支语句和逻辑运算符(编程练习)
C++PrimerPlus 第六章 分支语句和逻辑运算符(编程练习)原创 2022-07-30 10:00:00 · 332 阅读 · 0 评论 -
C++PrimerPlus 第六章 分支语句和逻辑运算符(复习题含答案)
第六章 分支语句和逻辑运算符(复习题含答案)原创 2022-07-29 10:00:00 · 558 阅读 · 0 评论 -
C++PrimerPlus 第六章 分支语句和逻辑运算符(复习题)
第六章 分支语句和逻辑运算符(复习题)原创 2022-07-28 10:00:00 · 296 阅读 · 0 评论 -
C++PrimerPlus 第六章 分支语句和逻辑运算符 - 6.8 简单文件输入/输出
幸运的是,C++使得将读取键盘输入和在屏幕上显示输出(统称为控制台输入/输出)的技巧用于文件输入/输出(文件I/O)非常简单。第17章将更详细地讨论这些主题,这里只介绍简单地文本文件I/O。这里再介绍一下文本I/O的概念。使用cin进行输入时,程序将输入视为一系列的字节,其中每个字节都被解释为字符编码。不管目标数据类型是什么,输入一开始都是字符数据——文本数据。然后,cin对象负责将文本转换为其他类型。为说明这是如何完成的,来看一些处理同一个输入行的代码。...原创 2022-07-27 11:00:48 · 353 阅读 · 0 评论 -
C++PrimerPlus 第六章 分支语句和逻辑运算符 - 6.7 读取数字的循环
假设要编写一个将一系列数字读入到数组中的程序,并允许用户在数组填满之前结束输入。一种方法是利用cin。请看下面的代码:int n;cin >> n;如果用户输入一个单词,而不是一个数字,情况将如何呢?发生这种类型不匹配的情况时,将发生4种情况:方法返回false意味着可以用非数字输入来结束读取数字的循环。非数字输入设置错误标记意味着必须重置该标记,程序才能继续读取输入。clear()方法重置错误输入标记,同时也重置文件尾(EOF条件,参见第5章)。输入错误和EOF都将导致cin返回false,第17章将讨论原创 2022-07-08 19:39:42 · 428 阅读 · 0 评论 -
C++PrimerPlus 第六章 分支语句和逻辑运算符 - 6.6 break和continue语句
目录6.6 break和continue语句break和continue语句都使程序能够跳过部分代码。可以在switch语句或任何循环语句中使用break语句,使程序跳到switch或循环后面的语句处执行。continue语句用于循环中,让程序跳过循环体中余下的代码,并开始新一轮循环(参见下图)。 程序清单6.12演示了这两条语句是如何工作的。该程序让用户输入一行文本。循环将回显每个字符,如果该字符为句点,则使用break结束循环。这表明,可以在某种条件为true时,使用break来结束循环。接下来,程序计原创 2022-06-21 14:57:24 · 380 阅读 · 0 评论 -
C++PrimerPlus 第六章 分支语句和逻辑运算符 - 6.5 switch语句
目录6.5switch语句6.5.1将枚举量用作标签6.5.2switch和if else6.5switch语句假设要创建一个屏幕菜单,要求用户从5个选项中选择一个,例如,便宜、适中、昂贵、奢侈、过度。虽然可以扩展if else if else序列来处理这5种情况,但C++的switch语句能够更容易地从大型列表中进行选择。下面是switch语句的通用格式:switch (integer-expression){case...原创 2022-04-19 10:00:00 · 254 阅读 · 0 评论 -
C++PrimerPlus 第六章 分支语句和逻辑运算符 - 6.4 ?:运算符
C++PrimerPlus 第六章 分支语句和逻辑运算符 - 6.4 ?:运算符6.4 ?:运算符6.4 ?:运算符C++有一个常被用来代替if else语句的运算符,这个运算符被称为条件运算符(?:),它是C++中唯一一个需要3个操作数的运算符。该运算符的通用格式如下:expression1 ? expression2 : expression3如果expression1为true,则整个条件表达式的值为expression2的值;否则,整个表达式的值为expressi...原创 2022-04-17 10:00:00 · 222 阅读 · 0 评论 -
C++PrimerPlus 第六章 分支语句和逻辑运算符 - 6.3 字符函数库cctype
C++PrimerPlus 第六章 分支语句和逻辑运算符 - 6.3 字符函数库cctype6.3字符函数库cctype6.3字符函数库cctypeC++从C语言继承了一个与字符相关的、非常方便的函数软件包,它可以简化诸如确定字符是否为大写字母、数字、标点符号等工作,这些函数的原型是在头文件cctype(老式的风格中为ctype.h)中定义的。例如,如果ch是一个字母,则isalpha(ch)函数返回一个非零值,否则返回0。同样,如果ch是标点符号(如逗号或句号),函数ispunct(c..原创 2022-04-16 10:00:00 · 274 阅读 · 0 评论