
C++ Primer Plus
淘淘图兔兔呀
这个作者很懒,什么都没留下…
展开
-
6.10 复习题
1.原创 2021-02-21 23:13:04 · 138 阅读 · 0 评论 -
6.8.3 读取文本文件
程序清单6.16 sumafile.cpp#include <iostream>#include <fstream>#include <cstdlib>const int SIZE = 60;int main(){ using namespace std; char filename[SIZE]; ifstream inFile; // 创建一个ifstream对象inFile。 cout << "E原创 2021-01-11 22:48:43 · 117 阅读 · 1 评论 -
6.8.2 写入到文本文件中
“使用文件输出的主要步骤如下:”包含头文件fstream。创建一个ofstream对象。将该ofstream对象同一个文件关联起来。就像使用cout那样使用该ofstream对象。程序清单6.15 outfile.cpp#include <iostream>#include <fstream>int main(){ using namespace std; char automobile[50]; int year; doub原创 2021-01-11 20:23:50 · 87 阅读 · 0 评论 -
6.8.1 文本I/O和文本文件
“使用cin进行输入时,程序将输入视为一系列的字节,其中每个字节都被解释为字符编码。不管目标数据类型是什么,输入一开始都是字符数据——文本数据。然后,cin对象负责将文本转换为其他类型。”...原创 2021-01-11 11:33:12 · 104 阅读 · 0 评论 -
6.7 读取数字的循环
“请看下面的代码:”int n;cin >> n;“如果用户输入一个单词,而不是一个数字,情况将如何呢?发生这种类型不匹配的情况时,将发生4种情况:”n的值保持不变。原创 2021-01-10 17:30:46 · 215 阅读 · 2 评论 -
6.5.2 switch和if else
“如果所有的选项都可以使用整数常量来标识,则可以使用switch语句或if else语句。由于switch语句是专门为这种情况设计的,因此,如果选项超过两个,则就代码长度和执行速度而言,switch语句的效率更高。”...原创 2021-01-10 17:15:37 · 108 阅读 · 0 评论 -
6.5.1 将枚举量用作标签
程序清单6.11 enum.cpp#include <iostream>enum {red, orange, yellow, green, blue, violet, indigo};int main(){ using namespace std; cout << "Enter color code (0-6):"; int code; cin >> code; while (code >= red &原创 2021-01-10 17:11:07 · 145 阅读 · 4 评论 -
6.5 switch语句
switch语句的通用格式switch (integer-expression){ case label1: statement1; case label2: statement2; ... default: statement3;}原创 2021-01-10 11:51:56 · 111 阅读 · 0 评论 -
6.2.4 逻辑操作符细节
“C++确保程序从左向右进行计算逻辑表达式,并在知道答案后立刻停止。”这个规则对于下面的例子非常有意义:x != 0 && 1.0 / x > 100.0如果第一个条件为false后,程序将不判定第二个条件。这样就避免了第二个条件被0除。...原创 2021-01-10 10:55:21 · 104 阅读 · 0 评论 -
6.2.3 逻辑NOT操作符:!
程序清单6.7 not.cpp#include <iostream>#include <climits>bool is_int(double);int main(){ using namespace std; double num; cout << "Yo, dude! Enter an integer value:"; cin >> num; while (!is_int(num)) {原创 2021-01-09 21:53:11 · 196 阅读 · 0 评论 -
6.2.1 逻辑OR操作符:||
“C++规定,||操作符是一个顺序点(sequence point)。也就是说,先修改左侧的值,然后再对右侧的值进行判定。”原创 2021-01-09 21:16:32 · 206 阅读 · 0 评论 -
6.1 if语句
条件操作符和错误防范“许多程序员将更直观的表达式 variable == value 反转为 value == variable,以此来捕获将相等操作符误写为赋值操作符的错误。”“一般来说,编写让编译器能够发现错误的代码,比找出导致难以理解的错误的原因要容易得多。”...原创 2021-01-09 20:25:33 · 118 阅读 · 0 评论 -
5.9 编程练习
#include <iostream>int main(){ using namespace std; int a, b; cout << "Please enter the first integer:"; cin >> a; cout << "Please enter the second integer:"; cin >> b; int s = 0; while...原创 2021-01-07 11:53:14 · 155 阅读 · 3 评论 -
5.8 复习题
入口条件循环在执行循环体中的语句之前检查测试条件,出口条件循环在执行循环体中的语句之后检查测试条件。for和while循环属于入口条件循环,do while属于出口条件循环。2.012343.0033669968k = 86.int i;for (i = 1; i <= 64; i = i*2) cout << i << endl;7. 使用花括号。有效,它将024赋值给x。有效,它将1赋值给y。.原创 2021-01-06 23:28:28 · 197 阅读 · 1 评论 -
5.6 嵌套循环和二维数组
程序清单5.20 nested.cpp#include <iostream>const int Cities = 5;const int Years = 4;int main(){ using namespace std; const char * cities[Cities] = { "Cribble City", "Gribbletown", "New Gribbl原创 2021-01-06 22:29:10 · 285 阅读 · 0 评论 -
5.5 循环和文本输入
程序清单5.16 textin1.cpp#include <iostream>int main(){ using namespace std; char ch; int count = 0; cout << "Enter characters; enter # to quit:\n"; cin >> ch; while (ch != '#') { cout << ch;原创 2021-01-06 20:50:39 · 93 阅读 · 0 评论 -
5.3.2 等待一段时间:编写延时循环
“头文件ctime定义了一个符号常量——CLOCKS_PER_SEC,该常量等于每秒钟包含的系统时间单位数。”“ctime将clock_t作为clock()返回类型的别名,这意味着可以将变量声明为clock_t类型,编译器将把它转换为long、unsigned int或适合系统的其他类型。”程序清单5.14 waiting.cpp#include <iostream>#include <ctime>int main(){ using namespace std;原创 2021-01-06 16:15:22 · 171 阅读 · 0 评论 -
5.3.1 for与while
“通常,程序员使用for循环来为循环计数。在无法预先知道循环将执行的次数时,程序员常使用while循环。”**“在设计循环时,请记住下面几条指导原则:确定循环终止的条件。在首次测试之前初始化条件。在条件被再次测试之前更新条件。”**...原创 2021-01-06 11:29:05 · 79 阅读 · 0 评论 -
5.3 while循环
用string类实现:#include <iostream>#include <string>int main(){ using namespace std; string name; cout << "Your first name, please:"; cin >> name; cout << "Here is your name, verticalized and ASCIIized:原创 2021-01-06 10:55:41 · 82 阅读 · 0 评论 -
5.1.11 逗号操作符(或其他句法技巧)
“C++还为逗号操作符提供了另外两个特性。首先,它确保先计算第一个表达式,然后计算第二个表达式(换句话说,逗号操作符是一个顺序点)。其次,C++规定,逗号表达式的值是第二部分的值。”“在所有操作符中,逗号操作符的优先级是最低的。”...原创 2021-01-05 17:47:19 · 99 阅读 · 2 评论 -
5.1.7 前缀格式和后缀格式
“总之,对于内置类型,采用哪种格式不会有差别;但对于用户定义的且有用户的递增和递减操作符的类型,前缀格式的效率更高。”原创 2021-01-04 23:43:42 · 235 阅读 · 0 评论 -
5.1.6 副作用和顺序点
“副作用(side effect)指的是在计算表达式时对某些东西(如存储在变量中的值)进行了修改;顺序点(sequence point)是程序执行过程中的一个点,在这里,进入下一步之前将确保对所有的副作用都进行了评估。在C++中,语句中的分号就是个顺序点,这意味着程序处理下一条语句之前,赋值操作符、递增操作符和递减操作符执行的所有修改都必须完成。另外,任何完整的表达式末尾都是一个顺序点。何为完整表达式呢?它是这样一个表达式:不是另一个更大表达式的子表达式。完整表达式的例子有:表达式语句中的表达式部分以及用原创 2021-01-04 23:38:37 · 117 阅读 · 0 评论 -
5.1.1 for循环的组成部分
“C++常用的方式是,在for和括号之间加上一个空格,而省略函数名与括号之间的空格。”原创 2021-01-04 17:33:25 · 318 阅读 · 0 评论 -
第5章 循环和关系表达式
“计算机除了存储数据外,还可以做很多其他的工作。可以对数据进行分析、合并、重组、抽取、修改、推断、合成以及其他操作。有时甚至会歪曲和破坏数据,不过我们应当尽量防止这种行为的发生。为了发挥其强大的操控能力,程序需要有执行重复的操作和进行决策的工具。”...原创 2021-01-04 11:53:28 · 87 阅读 · 0 评论 -
4.11 编程练习
#include <iostream>int main(){ using namespace std; const int ArSize = 20; char first[ArSize]; char last[ArSize]; char grade; int age; cout << "What is your first name?"; cin.getline(first, 20); cout ...原创 2020-11-29 15:50:18 · 228 阅读 · 0 评论 -
4.10 复习题
a. char actor[30];b. short betsie[100];c. float chuck[13];d. long double dipsea[64];int odd[5] = {1, 3, 5, 7, 9};int even = odd[0] + odd[4];cout << float[1];char str[20] = "cheeseburger";struct fish{char kind[10];int weig...原创 2020-11-28 20:59:58 · 1001 阅读 · 0 评论 -
4.9 总结
“new操作符允许在程序运行时为数据对象请求内存。该操作符返回获得内存的地址,可以将这个地址赋给一个指针,程序将只能使用该指针来访问这块内存。”“如果数据对象是简单变量,则可以使用解除引用操作符(*)”...原创 2020-11-28 20:20:03 · 103 阅读 · 0 评论 -
4.8.4 自动存储、静态存储和动态存储
1. 自动存储“在函数内部定义的常规变量使用自动存储空间,被称为自动变量,这意味着它们在所属的函数被调用时自动产生,在该函数结束时消亡。”原创 2020-11-28 17:52:25 · 191 阅读 · 0 评论 -
4.8.3 使用new创建动态结构
“将new用于结构由两步组成:创建结构和访问其成员。”1. 一个使用new和delete的范例#include <iostream>#include <cstring>using namespace std;char *getname(void);int main(){ char *name; name = getname(); cout << name << " at " << (int *) name原创 2020-11-28 17:16:21 · 119 阅读 · 0 评论 -
4.8.2 指针和字符串
“cout对象认为char的地址是字符串的地址,因此它打印该地址处的字符,然后继续打印后面的字符,直到遇到空字符(\0)为止。总之,如果给cout提供一个字符的地址,则它将从该字符开始打印,直到遇到空字符为止。”#include <iostream>int main(){ using namespace std; char flower[10] = "ro\0se"; cout << flower << endl; retur原创 2020-11-27 22:15:41 · 100 阅读 · 0 评论 -
4.8 指针、数组和指针算术
“在多数情况下,C++将数组名解释为数组第1个元素的地址。”“通常,使用数组表示法时,C++都执行下面的转换:”arrayname[i] becomes *(arrayname + i)“如果使用的是指针,而不是数组名,则C++也将执行同样的转换:”pointername[i] becomes *(pointername + i)“因此,在很多情况下,可以用相同的方式使用指针名和数组名。对于它们,可以使用数组方括号表示法,也可以使用解除引用操作符(*)。在多数表达式中,它们都表示地址。区别之一是,原创 2020-11-27 20:48:23 · 88 阅读 · 0 评论 -
4.7.6 使用new来创建动态数组
使用new创建动态数组创建动态数组:int *psome = new int [10];释放动态数组:delete [] psome;使用动态数组“C和C++内部都使用指针来处理数组。”“下面的程序演示了如何使用new来创建动态数组以及使用数组表示法来访问元素;它还指出了指针和真正的数组名之间的根本差别:”#include <iostream>int main(){ using namespace std; double *p3 = new d..原创 2020-11-27 17:45:14 · 581 阅读 · 0 评论 -
4.7.5 使用delete来释放内存
“使用delete的关键在于,将它用于new分配的内存。”原创 2020-11-27 17:00:54 · 163 阅读 · 0 评论 -
4.7.4 使用new来分配内存
“前面,我们将指针初始化为变量的地址;变量是在编译时分配的、有名称的内存,而指针只是为可以通过名称直接访问的内存提供了一个别名。指针真正的用武之地在于,在运行阶段分配未命名的内存以存储值。在这种情况下,只能通过指针来访问内存。”new的用法:int *pn = new int;“new int告诉程序,需要适合存储int的内存。new操作符根据类型来确定需要多少字节的内存。然后,它找到这样的内存,并返回其地址。接下来,将地址赋给pn,pn是被声明为指向int的指针。”“pn指向一个数据对象。数据对象原创 2020-11-27 16:30:57 · 299 阅读 · 0 评论 -
4.7.3 指针和数字
“要将数字值作为地址来使用,应通过强制类型转换将数字转换为适当的地址类型:”int *pt;pt = (int *) 0xB8000000;不能简单地将整数赋给指针:int *pt;pt = 0xB8000000; //这是错误的,编译器将显示一条错误消息,通告类型不匹配。下面的程序也是错误的:#include <iostream>int main(){ using namespace std; int *pt; pt = (int *) 0xB原创 2020-11-27 15:33:38 · 102 阅读 · 0 评论 -
4.7.2 指针的危险
“在C++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。”“一定要在对指针应用解除引用操作符(*)之前,将指针初始化为一个确定的、适当的地址。这是关于使用指针的金科玉律。”long *fellow;*fellow = 223323; //fellow指针没有被初始化,它可能有任何值。这可能会把223323放在不是所要存储的地方。这种错误可能会导致一些最隐匿、最难以跟踪的bug。...原创 2020-11-26 22:32:12 · 161 阅读 · 1 评论 -
4.7.1 声明和初始化指针
指针声明:int *p_updates;“这表明,*p_updates的类型为int。由于*操作符被用于指针,因此p_updates变量本身必须是指针。我们说p_updates指向int类型,我们还说p_updates的类型是指向int的指针,或int*。可以这样说,p_updates是指针(地址),而*p_updates是int,而不是指针。”“下面的声明:”int *p1, p2;“将创建一个指针(p1)和一个常规int变量(p2)。对每个指针变量名,都需要使用一个*。”“和数组一样,指针都原创 2020-11-26 22:18:14 · 112 阅读 · 0 评论 -
4.7 指针和自由存储空间
“使用常规变量时,值是指定的量,而地址为派生量。”*“指针变量将地址视为指定的量,而将值视为派生量。因此,指针名表示的是地址。操作符被称为间接值或解除引用操作符,将其应用于指针,可以得到该地址处存储的值。”“指针与C++基本原理——”“面向对象编程与传统的过程性编程的区别在于,OOP强调的是在运行阶段(而不是编译阶段)进行决策。”...原创 2020-11-26 21:36:33 · 105 阅读 · 0 评论 -
4.6 枚举
“C++的enum工具提供了另一种创建符号常量的方式,这种方式可以代替const。它还允许定义新类型,但必须按严格的限制进行。使用enum的句法与使用结构相似。”原创 2020-11-26 18:10:28 · 83 阅读 · 0 评论 -
4.5 共用体
“共用体的用途之一是,当数据项使用两种或更多种格式(但不会同时使用)时,可节省空间。例如,假设管理一个小商品目录,其中有一些商品的ID为整数,而另一些的ID为字符串。在这种情况下,可以这样做:”struct widget { char brand[20]; int type; union id { long id_num; char id_char[20]; } id_val;};widget prize;if (prize.typ原创 2020-11-26 17:39:22 · 78 阅读 · 0 评论