第1章 快速入门

1.1 编写简单的C++程序
1.2 初窥输入/输出
1.3 关于注释
1.4 控制结构
1.5 类的简介
1.6 C++程序

C++的大部分基本要素:内置类型、库类型、类类型、变量、表达式、语句和函数。

解决一个简单的数据处理问题:
某书店以文件形式保存其每一笔交易。每一笔交易记录某本书的销售情况,含有ISBN(国际标准书号,世界上每种图书的唯一标示符)、销售册数和销售单价。每一笔交易形如:
0-201-70353-x 4 24.99

编写的程序必须:
1)定义变量
2)实现输入和输出
3)定义数据结构来保存要处理的数据
4)测试是否两条记录具有相同的ISBN
5)编写循环,处理交易文件中的每一条记录

1.1 编写简单的C++程序
每个C++程序都必须包含一个或多个函数,而且必须有一个命名为 main
函数由执行函数功能的 语句序列组成。
操作系统通过调用main函数来执行程序,main函数则执行组成自己的语句并返回一个值给操作系统。

一个简单的main函数:
int main()
{
     return 0;
}

操作系统通过main函数返回的值来确定程序是否成功执行完毕。
返回值0表明程序成功执行完毕。

main函数在很多方面比较特别,其中最重要的是 每个C++程序必须含有main函数,且main函数是(唯一)被操作系统显示调用的函数

定义main函数和定义其他函数一样。
定义函数必须指定4个元素: 返回类型函数名圆括号内的形参表(可能为空)和 函数体

main函数的返回值必须是int型,该类型表示整数。int类型是 内置类型,即该类型是C++语言定义的。

在大多数系统中,main函数的返回值是一个状态指示器。
返回值0往往表示main函数成功执行完毕。
任何其他非0的返回值都有操作系统定义的含义。
通常非0返回值表明有错误出现。
每一种操作系统都有自己的方式告诉用户main函数返回什么内容。

编写与执行程序
     如何进行编译,与具体操作系统和编译器有关。
     许多基于PC的编译器都在集成开发环境(IDE)中运行,IDE将编译器与相关的构建和分析工具绑定在一起。

调用GNU或微软编译器
     调用C++编译器的命令因编译器和操作系统的不同而不同,常用的编译器是GNU编译器和微软Visual Studio编译器。
     调用GNU编译器的默认命令是g++:
例:     $ g++ prog1.cc -o prog1
     $是系统提示符,这个命令缠身一个名为prog1或prog1.exe的可执行文件。
     在UNIX系统下,可执行文件没有后缀;而在Windows下,后缀为.exe
     -o prog1 是编译器参数以及用来存放可执行文件的文件名。
     如果省略-o prog1,那么编译器在UNIX系统下产生名为a.out 而在Windows下产生名为a.exe的可执行文件。
     微软编译器采用cl来调用:
     c:\directory> cl -GX proj1.cpp
     c:\directory>是系统提示符,directory是当前目录名。
     cl是调用编译器的命令,-GX是一个选项,该选项在使用命令行界面编译程序时是必需的。
     微软编译器自动产生与源文件同名的可执行文件,这个可执行文件具有.exe后缀且与源文件同名。本例中,可执行文件命名为prog1.exe。

1 程序源文件命名规范:
     程序文件称作 源文件
C++程序文件的后缀与所运行的具体编译器有关,形式包括:
prog1.cc
prog1.cxx
prog1.cpp
prog1.cp
prog1.c

2 从命令行运行编译器
使用命令行界面,例如UNIX的shell窗口或windows的命令提示符窗口。
假设main程序在名为prog1.cc的文件中,可以使用如下命令来编译:
$ CC prog1.cc
CC是编译器命令名。编译器输出一个可执行文件,可以按名调用这个可执行文件。
例a.exe 或a.out
$ a.exe
$ ./a.out
在UNIX系统中,即使在当前目录,有时还必须指定文件所在的目录。“.”后的斜杠表明文件处于当前目录下。
访问main函数的返回值的方式和系统有关。不论UNIX还是Windows系统,执行程序后,必须发出一个适当echo命令。
UNIX系统中,通过键入如下命令获取状态:
$ echo $?
在Windows系统下查看状态,键入
c:diectory> echo %ERRORLEVEL% 

1.2 初窥输入/输出
输入输出由 标准库提供
常用到的 iostream库,处理格式化输入和输出
iostream库的基础是 istreamostream
流是指要从某种IO设备上读入或写出的字符序列。

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

1.2.2 一个使用IO库的程序
要求用户给出两数,然后输出它们的和:

#include <iostream>

int main()
{
    std::cout << "Enter two numbers:" << std::endl;
    int v1, v2;
    std::cin >> v1 >> v2;
    std::cout << "The sum of " << v1 << " and " << v2
              << " is " << v1 + v2 << std::endl;
    return 0;
}


#include <iostream> 是一个 预处理指示,告诉编译器要使用iostream库。
尖括号里的名字是一个 头文件
程序使用库工具时必须包含相关的头文件。

1. 写入到流
main函数体中第一条语句执行了一个 表达式
C++中,一个表达式有一个或几个操作数和通常是一个操作符组成。
该语句的表达式使用 输出操作符(<<操作符)

每个输出操作符实例都接受两个操作数:
左操作数必须是ostream对象;右操作数必须是要输出的值。
操作符将其右操作数写到作为其左操作数的ostream对象。

C++中,每个表达式都会产生一个结果,通常是将操作符作用到其操作数所产生的值。
当操作符是输出操作符时,结果是左操作数的值。
输出操作返回的值就是输出流本身。

既然输出操作符返回的是其左操作数,那么就可以将输出请求链接在一起。
输出提示语的那条语句等价于
(std::cout << "Enter two numbers:") << std::endl;
因为(std::cout << "Enter two numbers:”)返回其左操作数std::cout
这条语句等价于
std::cout << "Enter two numbers:”;
std::cout << std::endl;

endl是一个特殊值,称为操纵符(manipulator),将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区(buffer)。通过刷新缓冲区,用户可立即看到写入到流中的输出。

程序员经常在调试过程中插入输出语句,这些语句都应该刷新输出流。
忘记刷新输出流可能会造成输出停留在缓冲区中,如果程序崩溃,将会导致对程序崩溃位置的错误推断

2. 使用标准库中的名字
前缀std::表明cout和endl是定义在 命名空间(namespace)std中的。 
使用命名空间,程序员可以避免由于无意中使用了与库中所定义名字相同的名字而引致冲突。

标准库使用命名空间的副作用是:
当使用标准库中的名字时,必须显式地表达出使用的是命名空间std下的名字。
std::cout的写法使用了作用域操作符(scope operator,::操作符)
这种写法有点冗余。

3. 读入流
输入操作符(>>操作符)行为与输出操作符相似。
它接受一个istream对象作为其左操作数,接受一个对象作为其右操作数,
它从istream操作数读取数据并保存到右操作数中。
输入操作符返回其左操作数作为结果。

输入操作等价于:
std::cin >> v1;
std::cin >> v2;

4. 完成程序
“The sum of ”操作数是 字符串字面值。 

字符串字面值中的空格符不能用换行符代替。
空格符不允许出现在预处理指示中。

关键概念:已初始化变量和未初始化变量
已初始化变量是指变量在定义时就给定一个值。未初始化变量则未给定初始值:
int val1 = 0;     // initialized
int val2;           // uninitialized
定义变量时,应该给变量赋初始值,除非确定将变量用于其他意图之前会覆盖整个初值。
如果不能保证读取变量之前重置变量,就应该初始化变量。

1.3 注释
单行注释和成对注释
当行注释以双斜线(//)开头,双斜线右边的内容是注释,被编译器忽略。
注释对(/**/),从C语言继承过来的。编译器把注释对“/**/”之间的内容作为注释。

通常最好是将一个注释块放在所解释代码的上方。

代码改变时,注释应与代码保持一致。
错误的注释比没有注释更糟,因为它会误导后来者。

注释对不可嵌套
一个注释对不能出现在另一个注释对中。

临时忽略一段代码更好的方法是使用编辑器在每一行前插入单行注释。

1.4 控制结构
1.4.1 while语句
用while语句编写从1到10的求和的程序。
#include <iostream>

int main()
{
   int sum = 0, val = 1;
   while (val <= 10)
   {
      sum += val;
      ++val;
   }
   std::cout << "Sum of 1 to 10 inclusive is " << sum << std::endl;

   return 0;
}

while结构有这样的形式:
while (condition) while_body_statement;
while通过测试condition(条件)和执行相关的while_body_statement来重复执行,直到condition为假。
条件是一个可求值的表达式,所以可以测试其结果。

+=操作符是 复合赋值操作符。等效编写一个加法和一个赋值的语句。
前自增操作符(++操作符),++val 等效 val = val + 1

1.4.2 for 语句
使用for循环编写求1到10的和的程序:
#include <iostream>

int main()
{
   int sum = 0;
   for (int val = 1; val <= 10; ++val)
   {
      sum += val;
   }

   std::cout << "Sum of 1 to 10 inclusive is " << sum << std::endl;

   return 0;
}

for 语句头由三部分组成:一个初始化语句,一个条件,一个表达式。
仅当for语句体执行后才执行表达式。

1.4.3 if 语句

1.4.4 读入未知数目的输入
允许用户指定一组数求和。

#include <iostream>

int main()
{
   int sum = 0, value;
   while (std::cin >> value)
   {
      sum += value;
   }

   std::cout << "Sum is " << sum << std::endl;

   return 0;
}

当使用 istream 对象作为条件,结果是测试流的状态。
如果流是有效的(读入下一个输入是可能的),那么测试成功
遇到文件结束符(end-of-file)或遇到无效输入时,如读取了一个不是整数的值,则 istream 对象是无效的。
处于无效状态的 istream 对象将导致条件失败。

endl 输出换行并刷新与 cout 相关联的缓冲区。

从键盘输入文件结束符
操作系统使用不同的值作为文件结束符。
Windows 通过键入 control - z
Unix 通过 control - d


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值