第1章 开始
1.1 简单的 C++ 程序
-
OS 通过调用 main 函数来运行 C++ 程序。main 函数的返回类型必须为 Int(int 类型是一种内置类型,即语言自身定义的类型)。多数系统中,main 的返回值被用来指示状态。返回值0表示成功,非0返回值的含义由系统定义,常用来指出错误类型。
-
return 语句
- 结束函数的执行
- 向调用者返回一个值,返回值的类型与函数的返回类型相一致
一种类型不仅定义了数据元素的内容,还定义了这类数据上可以进行的运算
1.2 初识输入输出
-
C++ 未定义任何 I/O 语句,但包含了一个全面的标准库来提供 I/O 机制(以及很多其他设施)
-
iostream 库,包含两个基础类型 istream(输入流) 和 ostream(输出流)
一个流就是一个字符序列,从是从I/O设备读出或写入I/O设备的。“流”的意思表示随着时间的推移,字符是顺序生成或消耗的。
-
标准输入输出对象:标准库中定义了4个I/O对象
- istream 类型的一个对象:cin(see-in,又称标准输入),
- ostream 类型的一个对象:cout(see-out,又称标准输出):
- ostream 类型的一个对象:cerr(see-err,又称标准错误),用来输出警告和错误信息
- ostream 类型的一个对象:clog(see-log),用来输出程序运行时的一般性信息
系统通常将程序所运行的窗口与这些对象关联
我们读取cin时,数据从程序正在运行的窗口读入
我们向cout、cerr、clog写入数据时,将会写到同一个窗口 -
#include 指令和头文件的名字必须写在同一行中
包含来自标准库的头文件时,用尖括号(< >)包围头文件
对不属于标准库的头文件,用双引号(" ")包围头文件
-
向流写入数据
-
<< 运算符接受两个运算对象:左侧的运算对象必须是一个 ostream 对象,右侧的运算符对象是要打印的值。此运算符将 给定的值 写到 给定的ostream对象 中,运算结果为其左侧的 ostream 对象
std::cout<<"Enter two numbers:"<<std::endl; //第一个 <<运算符的运算结果std::cout,为第二个 << 运算符的左侧运算对象,即可将输出请求连接起来,等价于 (std::cout<<"Enter two numbers:")<<std::endl;
-
-
从流读取数据
-
输入运算符(>>)接受一个 istream 对象作为其左侧运算对象,接受一个对象作为其右侧运算对象。它从给定的istream 对象读入数据,并存入右侧的给定对象中,运算结果为其左侧运算对象 std::cin
std::cin>>v1>>v2; //第一个>>运算符的运算结果std::cin,为第二个>>运算符的左侧运算对象,即可将输出请求连接起来,等价于 (std::cin>>v1)>>v2;
-
-
endl
一个被称为操纵符的特殊值。endl 的效果就是结束当前行,并将与设备关联的缓冲区中的内容刷到设备中。缓冲刷新操作可保证到目前为止程序所产生的的所有输出都真正写入输出流中,而不是仅停留在内存中等待写入流。
程序员常常在调试时添加打印语句。这类语句应保证“一直”刷新流。否则,如果程序崩溃,输出可能还留在缓冲区中,从而导致程序崩溃位置的错误
-
标准库中的名字
前缀 std:: 指出 cout、endl 是定义在名为 std 的命名空间中的。
命名空间可避免名字定义冲突,以及使用库中相同名字导致的冲突。标准库定义的所有名字都在命名空间 std 中。
通过命名空间使用标准库有个副作用:当使用标准库中的一个名字时,需显式说明我们想使用来自命名空间 std 中的名字。如,需要写出 std::cout,通过使用作用域运算符(::)来指出我们想使用定义在命名空间 std 中的名字 cout。
std::cout<<"Sum of "<<v1<<" and "<<v2 <<"is"<<v1+v2<<std::endl; //针对不同类型的运算对象,如字符串常量、int,标准库定义了不同版本的输入输出运算符来进行处理
1.3 注释简介
-
编译器会忽略注释,因此注释对程序的行为或性能不产生任何影响
单行注释:以 // 开始,以换行符结束,中间内容可为任何文本,包括额外的// 界定符注释:/*....*/,可包含除*/外的任何内容,包括换行符,但不能嵌套 /* * 注释对/* */不能嵌套。 * “不能嵌套”几个字会被认为是源代码, * 像剩余程序一样处理 */ std::cout<</*"*/ "*/<<std::endl; // 运行报错 std::cout<</*"*/ "/*" /*"*/<<std::endl; // 正常运行
1.4 控制流
-
while 语句
-
读取数量不定的输入数据
预先不知道要对多少个数据进行输入,不断读取数据直至没有新的输入为止
#include<iostream>
int main(){
int sun=0,value=0;
//读取数据直至文件尾
while(std::cin>>value){
sum+=value;
}
std::cout<<"Sum is:"<<sum<<std::endl;
return 0;
}
/*
此while循环条件的求值是执行表达式:std::cin>>value
>> 运算符返回其左侧运算对象,本例中为std::cin,即此循环条件 实际检测的是 std::cin
使用一个istream对象作为条件时,其效果是检测流的状态。
若流是有效的,即流未遇到错误,则检测成功
当遇到文件结束符,或遇到一个无效输入时(如读入的值不是一个整数),istream 对象的状态会变为无效。
处于无效状态的 istream 对象会使条件变为假
故,while循环会一直执行直至遇到文件结束符或输入错误
*/
1.5 类简介
-
C++ 中,可通过定义一个类来定义自己的数据结构
-
每个类都定义了一个新的类型,其类型名就是类名,如 Sales_item 类定义了一个名为 Sales_item 的类型。与内置类型一样,可自定义 类 类型的变量,如 Sales_item item。
-
通常以一个类对象的名义来调用成员函数,如 item1.ibsn(),使用点运算符来表示需要“名为 item1 的对象的 ibsn 成员”。
-
点运算符(.)只能用于类类型的对象。其左侧运算对象必须是一个类类型的对象,右侧运算对象必须是该类型的一个成员名,运算结果为右侧运算对象指定的成员。
-
使用点运算符来访问一个成员函数时,通常是想调用该函数。使用调用运算符( () )来调用一个函数。调用运算符里面放置实参列表(可为空),
1.6 补充
编译器的一部分工作是寻找程序文本中的错误。编译器没有能力检查一个程序是否按照其作者的意图工作,但可以检查形式上的错误。常见的编译器可以检查出的错误
语法错误 syntax error
类型错误 type error
声明错误 declaretion error
|
|