C++ Primer系列 第1章 开始

学习一门新的程序设计语言的最好的方法就是练习编写程序。在本章中我们将编写一个程序来解决简单的书店问题。

我们的书店保存所有销售记录的档案,每条记录保存了某本书的一次销售的信息(一册或多册)。每条记录包含三个数据项:
0-201-70353-X
4
24.99

第一项是书的ISBN号(国际标准书号,一本书的唯一标识),第二项是售出的册数,最后一项是书的单价。有时,书店老板需要查询此档案,计算每本书的销售量,销售额及平均售价。

1.1 编写一个简单的C++程序

  • 请注意,return语句末尾的分号。在C++中,大多数C++语言以分号表示结束。它们很容易被忽略,但如果忘记了写分号,就会导致莫名其妙的编译错误。

重要概念:类型

类型是程序设计最重要的概念之一,在本书中我们会反复遇到它。一种类型不仅定义了数据元素的内容,还定义了这类数据上可以进行的运算。

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

1.1.1 编译,运行程序

运行GNU或微软编译器

在不同操作和编译器系统中,运行C++编译器的命令也各不相同。最常用的编译器是GNU编译器和微软Visual Studio编译器。默认情况下,运行GNU编译器的命令是g++:

$ g++ -o prog1 prog1.cc

此处,$是系统提示符。-o prog1是编译器参数,指定了可执行文件的文件名。

1.2 初识输入输出

C++语言并未定义任何输入输出(IO)语句,取而代之,包含了一个全面的标准库(standard library)来提供IO机制(以及很多其他设施)。对于很多用途,包括本书中的示例来说,我们只需了解IO库中一部分基本概念和操作。

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

1.3 注释简介

注释界定符不能嵌套
界定限定符对形式的注释是以/开始,以/结束的。因此,一个注释不能嵌套在另一个注释之内。编译器对这类问题所给出的错误信息可能是难以理解,令人迷惑的。例如,在你的系统中编译下面的程序,就会产生错误:

/*
* 注释对/* */不能嵌套。
* "不能嵌套"几个字会被认为是源码,
* 像剩余程序一样处理
*/
int main()
{
	return 0;
}

1.4 流程控制

程序设计语言提供了多种不同的控制流语句,允许我们写出更为复杂的执行路径。

1.4.1 while语句

while语句会反复执行一段代码,直至给定条件为假为止。

while (condition)
    statement

1.4.2 for语句

for (int val = 1; val <= 10; ++val)
    sum += val;

简要重述一下for循环的总体执行流程:

  1. 创建变量val,将其初始化为1;
  2. 检测val是否小于等于10。若检测成功,执行for循环体。若失败,退出循环,继续执行for循环体之后的第一条语句。
  3. 将val值增加1。
  4. 重复第2步中的条件检测,只要条件为真就继续执行剩余步骤。

1.4.3 读取数量不定的输入数据

从键盘输入文件结束符

当从键盘向程序输入数据时,对于如何指出文件结束,不同操作系统有不同的约定。在Windows系统中,输入文件结束符的方法是敲Ctrl+Z(按住Ctrl键的同时按住Z键),然后按Enter或Return键。在UNIX系统中,包括Mac OS X系统中,文件结束符输入是用Ctrl+D。

1.4.4 if语句

  • C++用=进行赋值,用== 作为相等运算符。两个运算符都可以出现在条件中。一个常见的错误是想在条件中使用 ==(相等判断),却误用了=。

1.5 类简介

在解决书店程序之前,我们还需要了解的唯一一个C++特性,就是如何定义一个数据结构来表示销售数据。在C++中,我们通过定义一个类(class)来定义自己的数据结构。

对于书店程序来说,我们假定类名为Sales_item,头文件Sales_item.h中已经定义了这个类。

1.5.1 Sales_item类

关键概念:类定义了行为

当你读写这些程序时,一件要牢记的是,类Sales_item的作者定义了类对象可以执行的所有动作。即Sales_item类定义了创建一个Sales_item对象时会发生什么事情,以及对Sales_item对象进行赋值,加法或输入输出运算时会发生什么事情。

1.5.2 初识成员函数

什么是成员函数?
这个if语句的检测条件

item1.isbn() == item2.isbn()

调用名为isbn的成员函数(member function)。成员函数是定义为类的一部分的函数,有时也被称为方法(method)。

1.6 书店程序

现在我们已经准备好完成书店程序了。我们需要从一个文件中读取销售记录,生成每本书的销售报告,显示售出册数,总销售额和平均售价。我们假定每个ISBN书号的所有销售记录在文件中是聚在一起保存的。

#include <iostream>
#include "Sales_item.h"
int main()
{
	Sales_item total; // 保存下一条交易记录的变量
	// 读入第一条交易记录,并确保有数据可以处理
	if (std::cin >> total) {
		Sales_item trans; // 保存和的变量
		// 读入并处理剩余交易记录
		while (std::cin >> trans) {
			// 如果我们仍在处理相同的书
			if (total.isbn() == trans.isbn())
				total += trans; // 更新总销售额;
			else {
				// 打印前一本书的结果
				std::cout << total << std::endl;
				total = trans; // total现在表示下一本书的销售额
			}
		}
		std::cout << total << std::endl; // 打印最后一本书的结果
	} else {
		// 没有输入! 警告读者
		std::is_reference << "No data?!" << std::endl;
		return -1; // 表示失败
	}
	return 0;
}

小结

本章介绍了足够多的C++语言的知识,以使你能够编译,运行简单的C++程序。我们看到了如何定义一个main函数,它是操作系统执行你的程序的调用入口。我们还看到了如何定义变量,如何进行输入输出,以及如何编写if,for和while语句。本章最后介绍了C++中最基础的特性——类。在本章中,我们看到了,对于其他人定义的一个类,我们应该如何创建,使用其对象。在后续章节中,我们将介绍如何定义自己的类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值