您的位置:首页 > 编程语言 > C语言/C++

《C++ Primer》学习笔记1-第一章快速入门

2014-01-20 23:48 423 查看
《C++ Primer》学习笔记1
——2013.12.10周二 任务量:第一章(P1-P25)

——仅仅是简单记录了,需要自己再记一下的内容。

标准库定义了 4 个 IO 对象。处理输入时使用命名为 cin(读作 see-in)的 istream 类型对象。这个对象也称为标准输入。处理输出时使用命名为 cout(读作 see-out)的 ostream 类型对象,这个对象也称为标准输出。标准库还定义了另外两个 ostream 对象,分别命名为 cerr 和 clog(分别读作“see-err”和“see-log”)。cerr 对象又叫作标准错误,通常用来输出警告和错误信息给程序的使用者。而 clog 对象用于产生程序执行的一般信息。

每个输出操作符实例都接受两个操作数:左操作数必须是 ostream 对象;右操作数是要输出的值。操作符将其右操作数写到作为其左操作数的 ostream 对象。C++ 中,每个表达式都会产生一个结果,通常是将操作符作用到其操作数所产生的值。当操作符是输出操作符时,结果是左操作数的值。也就是说,输出操作返回的值是输出流本身。
endl is a special value, called a manipulator, that when written to an output stream has the effect of writing a newline to the output and flushing the buffer associated with that device. By flushing the buffer,
we ensure that the user will see the output written to the stream immediately.endl 是一个特殊值,称为操纵符,将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区通过刷新缓冲区,用户可立即看到写入到流中的输出。例子:

#include<iostream>

#include "Sales_item.h"

int main() {

// declarevariables to hold running sum and data for the next record

Sales_item total, trans;

// is there data to process?

if (std::cin >> total) {

// if so, read the transaction records

while(std::cin >> trans)

if(total.same_isbn(trans))

// match:update the running total

total = total +trans;

else {

// no match:print & assign to total

std::cout <<total << std::endl;

total = trans;

}

// rememberto print last record

std::cout <<total << std::endl;

}else {

// no input!,warn the user

std::cout <<"No data?!" << std::endl;

return -1;// indicatefailure

}

return 0;

}

一旦 while 完成,我们仍须写出与最后一个 ISBN 相关联的数据。当 while 语句结束时,total 包含文件中最后一条 ISBN 数据,但是我们没有机会输出这条数据。我们在结束最外层 if 语句的语句块的最后一条语句中进行输出。

Programmers often insert print statements during debugging. Such statements should always flush the stream. Forgetting to do so may cause output to be left in the buffer if the program crashes, leading to incorrect inferences about
where the program crashed.程序员经常在调试过程中插入输出语句,这些语句都应该刷新输出流。忘记刷新输出流可能会造成输出停留在缓冲区中,如果程序崩溃,将会导致程序错误推断崩溃位置。

会注意到这个程序中使用的是 std::cout 和 std::endl,而不是 cout 和 endl。前缀 std:: 表明 cout 和 endl 是定义在命名空间std 中的。使用命名空间程序员可以避免与库中定义的名字相同而引起无意冲突。因为标准库定义的名字是定义在命名空间中,所以我们可以按自己的意图使用相同的名字。 标准库使用命名空间的副作用是,当我们使用标准库中的名字时,必须显式地表达出使用的是命名空间 std 下的名字。std::cout 的写法使用了作用域操作符(scope
operator
,:: 操作符),表示使用的是定义在命名空间 std 中的 cout。我们将在第 3.1 节学习到程序中经常使用的避免这种冗长句法的方法。

在写 C++ 程序时,大部分出现空格符的地方可用换行符代替。这条规则的一个例外是字符串字面值中的空格符不能用换行符代替。另一个例外是空格符不允许出现在预处理指示中。

C++ 中有单行注释和成对注释两种类型的注释。单行注释以双斜线(//)开头,另一种定界符,注释对(/* */),是从 C 语言继承过来的。这种注释以“/*”开头,以“*/”结尾。编译器把落入注释对“/**/”之间的内容作为注释。

Comment PairsDo Not Nest注释对不可嵌套 问题是如果那段代码已经有了注释对,那么新插入的注释对将提前终止。

while (std::cin >> value) sum += value; // equivalent to sum = sum + valuewhile while 条件测试输入操作符的返回结果,意味着测试 std::cin。 当我们使用 istream 对象作为条件,结果是测试流的状态。如果流是有效的(也就是说,如果读入下一个输入是可能的)那么测试成功。遇到文件结束符或遇到无效输入时,如读取了一个不是整数的值,则 istream 对象是无效的。处于无效状态的 istream 对象将导致条件失败。

操作系统使用不同的值作为文件结束符。Windows 系统下我们通过键入 control—z——同时键入“ctrl”键和“z”键,来输入文件结束符。Unix 系统中,包括 Mac OS—X 机器,通常用 control—d。

标准库的头文件用尖括号 < > 括起来,非标准库的头文件用双引号 " " 括起来。 #include <iostream>

#include"Sales_item.h"//自定义类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: