附:此笔记是为了记录自己学习《C++ primer》中文版第五版的学习过程,同时督促自己,“希望有一天,自己从来不缺从头再来的勇气”,在此之前看的C++的书都很杂乱,所以想系统性地再认真学一遍,打好基础。
书中使用最多的编译器是GNU编译器4.7.0,本人使用的Dev-C++ 5.11,并对书中的练习进行了相应解答,仅供参考,有错误的地方,欢迎联系我指正,十分感谢。
第一章 开始
0 示例
编写一个程序来解决简单的书店问题。
要求:书店保存所有销售记录的档案,每条记录保存某本书的一次销售的信息(一册或多册)。每条记录包含三个数据项。
0-201-70353-X 4 24.99
第一项是书的ISBN号。第二项是售出的册数,第三项是书的单价。
有时书店老板需要查询此档案,计算每本书的销售量、销售额及评价售价。
思考该程序包含哪些子问题?
-
定义变量
-
进行输入和输出
-
使用数据结构保存数据
-
检测两条记录是否有相同的ISBN
-
包含一个循环来处理销售档案中的每条记录
1.1 输入输出
#include <iostream>
iostream
库中包含两个基础类型istream
和ostream
,分别表示输入和输出。一个流就是一个字符序列,是从IO设备读出或写入IO设备的。
int main( )
{
std::cout<<"Enter two numbers:"<<std::endl;
int v1,v2;
cin>>v1>>v2;
std::cout<<"The sum of"<<v1<<"and"<<v2
<<"is"<<v1+v2<<std::endl;
return 0;
}
cin
标准输入,istream
类型的对象。使用输入运算符>>,该运算符返回其左侧的运算对象,左侧的运算对象必须是一个istream
对象。
cout
标准输出,ostream
类型的对象。使用输出运算符<<,该运算符返回其左侧的运算对象,左侧的运算对象必须是一个ostream
对象。
std::cout<<"Enter two numbers:"<<std::endl;
,有两个<<运算符,每个运算符的左侧运算对象都是相同的,即都是std::cout
,因此可以写成一行,也可以用两条语句来生成相同的输出:
std::cout<<"Enter two numbers:";
std::cout<<std::endl;
第一个输出运算符给用户打印一条信息,是一个字符串字面值常量,是用一对双引号包围的字符序列。在双引号之间的文本被打印到标准输出。
第二个运算符打印endl
,是一个操纵符的特殊值,作用是结束当前行,并将于设备关联的缓冲区中的内容刷到设备中。
注意 使用标准库中的名字std:: cout
和 std::endl
,而不是直接的cout
和endl
。
前缀std::
指出名字cout
和endl
是定义在名为std
的命名空间(namespace)
中的。命名空间可以帮助我们避免不经意的名字定义冲突,以及使用库中相同名字导致的冲突。标准库定义的所有名字都在命名空间std
中。
通过命名空间使用标准库有一个副作用:当使用标准库中的一个名字时,必须显式说明我们想使用来自命名空间std
中的名字。例如,需要写出std:: cout
,通过使用作用域运算符(::)
来指出我们想使用定义在命名空间std
中的名字cout
。
如果在程序首部声明命名空间using namespace std;
,则在输入、输出就不需要作用运算符进行前缀,直接写cin,cout即可。
练习1.3
编写程序,在标准输出上打印 Hello, World。