第一章:开始

1. 编写一个简单的 C++ 程序

int main()
{
    return 0;
}

main 函数的返回类型必须为 int,即整数类型。int 类型是一种 内置类型 (built-in type),即语言自身定义的类型。

在大多数系统中,main 的返回值被用来指示状态。返回值 0 表明成功,非 0 的返回值的含义由系统定义,通常用来指出错误类型。

重要概念:类型

类型是程序设计最基本的概念之一,一种类型不仅定义了数据元素的内容,还定义了这类数据上可以进行的运算。

程序所处理的数据都保存在变量中,而每个变量都有自己的类型。如果一个名为 v 的变量的类型为 T,我们通常说 “v 具有类型 T”,或等价的,“v 是一个 T 类型变量”。

访问 main 的返回值的方法依赖于系统。在 UNX 和 Windows 系统中,执行完一个程序后,都可以通过 echo 命令获得其返回值。

  • UNIX 系统中,通过如下命令获得状态:
    $ echo $?
    
  • Windows 系统中查看状态可键入
    $ echo %ERRORLEVEL%
    

运行 GNU 或微软编译器

  • 运行 GNU 编译器的命令是 g++

    $ g++ -o progl progl.cc
    

    注意:根据使用的 GNU 编译器的版本,你可能需要指定 -std=c++0x 参数来打开对 C++11 的支持)

  • 运行微软 Visual Studio2010 编译器的命令为 cl:

    > cl /EHsc progl.cpp
    

    命令 cl 调用编译器,/EHsc 是编译器选项,用来打开标准异常处理。

编译器通常都包含一些选项,能对有问题的程序结构发出警告。打开这些选项通常是一个好习惯。我们习惯在 GNU 编译器中使用 -Wall 选项,在微软编译器中则使用 /W4

更详细的信息请查阅你使用的编译器的参考手册。

练习 1.1:査阅你使用的编译器的文档,确定它所使用的文件命名约定。编译并运行上面的 main 程序。

练习 1.2:改写程序,让它返回 - 1. 返回值 - 1 通常被当作程序错误的标识。重新编译并你的程序,观察你的系统如何处理 main 返回的错误标识。

2. 初识输入输出

C++ 语言并未定义任何输入输出(IO)语句,取而代之,包含了一个全面的标准库(standard library)来提供 IO 机制(以及很多其他设施)。

iostream 库包含两个基础类型 istream 和 ostream,分别表示输入流和输岀流。一个流就是一个字符序列,是从 IO 设备读出或写入 IO 设备的。术语 (stream)想要表达的是,随着时间的推移,字符是顺序生成或消耗的。

标准输入输出对象

标准库定义了 4 个 IO 对象,它们是上面 istream 或 ostream 类型的对象。4 个对象如下:

  • cin 标准输入,它是 istream 类的对象
  • cout 标准输出,它是 ostream 类的对象
  • cerr 用来输出警告和错误消息,也称为标准错误,它是 ostream 类的对象
  • clog 用来输出程序运行时的一般性信息,它是 ostream 类的对象

一个使用 IO 库的程序

#include <iostream>

int main()
{
    std::cout <<  "Enter two numbers: " << std::endl;

    int v1 = 0, v2 = 0;
    std::cin >> v1 >> v2;
    std::cout << "The sum of " << v1  << " and " << v2
              << " is " << v1 + v2 << std::endl;
    
    return 0;
}

运行结果如下:

Enter two numbers:
3 7
The sum of 3 and 7 is 10

在 C++ 中,一个表达式产生一个计算结果,它由一个或多个运算对象和(通常是)一个运算符组成。

下面表达式中

std::cout <<  "Enter two numbers: " << std::endl;

<< 运算符接受两个 运算对象:左侧的运算对象必须是一个 ostream 对象,右侧的运算对象是要打印的值。

此运算符将给定的值写到给定的 ostream 对象中,它的计算结果就是其左侧运算对象。即,计算结果就是我们写入给定值的那个 ostream 对象。

我们的输出语句使用了两次 << 运算符。因为此运算符返回其左侧的运算对象,因此第一个运算符的结果成为了第二个运算符的左侧运算对象。这样,我们就可以将输出请求连接起来。因此,我们的表达式等价于

(std::cout <<  "Enter two numbers: ") << std::endl;

链中每个运算符的左侧运算对象都是相同的。在本例中是 std::cout。我们也可以用两条语句生成相同的输出:

std::cout <<  "Enter two numbers: ";
std::cout << std::endl;
  • 第一个输出运算符给用户打印一条消息。这个消息是一个字符串字面值常量,是用一对双引号包围的字符序列。在双引号之间的文本被打印到标准输出。

  • 第二个运算符打印 endl,这是一个被称为操纵符的特殊值。写入 endl 的效果是结束当前行,并将与设备关联的缓冲区(buffer)中的内容刷到设备中。缓冲刷新操作可以保证到目前为止程序所产生的所有输出都真正写入输出流中,而不是仅停留在内存中等待写入到对应设备的流

[注] 程序员常常在调试时添加打印语句。这类语句应该保证 “一直” 刷新流。否则,如果程序崩溃,输出可能还留在缓冲区中,从而导致关于程序崩溃位置的错误推断。

使用标准库中的名字

前缀 std:: 指出名字 coutend1 是定义在名为 std命名空间( namespace)中的。

命名空间可以帮助我们避免不经意的名字定义冲突,以及使用库中相同名字导致的冲突。

标准库定义的所有名字都在命名空间 std 中

从流读取数据

int v1 = 0, v2 = 0;

上面语句中,我们定义了两个 int 类型的变量。int是一种内置类型,用来表示整数。然后我们将它初始化为 0,初始化一个变量,就是在变量创建的同时为它赋予一个值

std::cin >> v1 >> v2;

输入运算符 >> 与输出运算符类似,它接受一个 istream 作为其左侧运算对象,接受一个对象作为其右侧运算对象。它从给定的 istream 读入数据,并存入给定对象中。与输出运算符类似,输入运算符返回其左侧运算对象作为其计算结果。因此,此表达式等价于

(std::cin >> v1) >> v2;

或者

std::cin >> v1;
std::cin >> v2;

完成程序

std::cout << "The sum of " << v1  << " and " << v2
            << " is " << v1 + v2 << std::endl;

这条语句虽然比提示用户输入的打印语句更长,但原理上是一样的,它将每个运算对象打印在标准输出上。其中比较有意思的地方在于运算对象并不都是相同类型的值。标准库定义了不同版本的输入输出运算符,来处理这些不同类型的运算对象。

注释简介

控制流

类简介

书店程序

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342