欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《C++ Primer》学习笔记_第一章 开始

程序员文章站 2022-07-16 14:54:55
...

第一章 开始

本章介绍C++的大部分基础内容:类型、变量、表达式、语句及函数。
————————————————————————————————————————————————————————————

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

每个C++程序都包含一个或多个函数(function),其中一个必须命名为main。操作系统通过调用main来运行C++程序。

下面是一个非常简单的main函数,只是返回给操作系统一个值:

int main()
{
	return 0;
}

一个函数的定义包含四部分:返回类型(return type)函数名(function name)、一个括号包围的形参列表(parameter list,允许为空) 以及 函数体(function body)

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

函数定义的最后一部分是函数体,它是一个以左 花括号(curly brace) 开始,以右括号结束的 语句块(block of statements)

{
	reyturn 0;
}

这个语句块中唯一的一条语句是return,它结束函数的执行。在本例中,return还会向调用者返回一个值。当return语句包括一个值时,此返回值的类型必须与函数的返回类型相容。

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

重要概念:类型
1.类型是程序设计最基本的概念之一,一种类型不仅定义了数据元素的内容,还定义了这类数据上可以进行的运算。
2.程序所处理的数据都保存在变量中,而每个变量都有自己的类型。

1.1.1 编译、运行程序

程序源文件命名约定
无论你使用命令行界面或者IDE,大多数编译器都要求程序源码存储在一个或多个文件中。程序文件通常被称为源文件(source file)

从命令行运行编译器
略。

————————————————————————————————————————————————————————————

1.2 初识输入输出

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

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

标准输入输出对象
标准库定义了4个IO对象。为了处理输入,我们使用一个名为cin的istream类型的对象。这个对象也被称为标准输入(standard input)。对于输出,我们使用一个名为cout的ostream类型的对象。此对象也被称为标准输出(standard output)。标准库还定义了其他两个ostream对象,名为cerrclog。我们通常用cerr来输出警告和错误信息,因此它也被称为标准错误(standard error)。而clog用来输出程序运行时的一般性信息。

一个使用IO库的程序
在书店程序中,我们需要将多条记录合并成单一的汇总记录。通过使用IO库,我们可以拓展main程序,使之能提示用户输入两个数,然后输出它们的和:

#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

程序中的第一行#include < iostream >告诉编译器我们想要使用iostream库。尖括号中的名字指出了一个头文件(header)。每个使用标准库设时的程序都必须包含相关的头文件。

向流写入数据
main的函数体的第一条语句执行了一个表达式(expression)。在c++中,一个表达式产生一个计算结果,它由一个或多个运算对象和(通常是)一个运算符组成。这条语句中的表达式使用了输出运算符<<)在标准输出上打印消息:

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

<<运算符接受两个运算对象:左侧的运算对象必须是一个ostream对象,右侧的运算对象是要打印的值。此运算符将给定的值写到给定的ostream对象中。输出运算符的计算结果就是其左侧运算对象。即,计算结果就是我们写入给定值的那个ostream对象。

第一个输出运算符给用户打印一条消息。这个消息时一个字符串字面值常量(string literal),是用一对双引号包围的字符序列。在双引号之间的文本被打印到标准输出。

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

使用标准库中的名字
前缀std::指出名字cout和endl是定义在名为std命名空间(namespace) 中的。标准库定义的所有名字都在命名空间std中。

通过命名空间使用标准库有一个副作用:当使用标准库中的一个名字时,必须显式说明我们想使用来自命名空间std的名字。例如,需要写出std::cout,通过使用作用域运算符:: )来指出我们想使用定义在命名空间std中的名字cout。

从流读取数据
在提示用户输入数据之后,接下来我们希望读入用户的输入。首先定义两个名为v1和v2的变量(variable)来保存输入:

int v1=0,v2=0

我们将两个变量定义为int类型,还把它们初始化initialize)为0。初始化一个变量,就是在变量创建的同时为它赋予一个值。

下一条语句是

std::cin>>v1>>v2;

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

完成程序
剩下的就是打印计算结果了:

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

本例中存在字符串字面值常量和int值两种不同类型的值,标准库定义了不同版本的输入输出运算符来处理这些不同类型的运算对象。

————————————————————————————————————————————————————————————

1.3 注释简介

C++中注释的种类
1.单行注释,运用双斜线(//

//这是一个注释

2.界定符对注释,运用两个界定符(/* 和 */

/*这也是一个注释*/

注释界定符不能嵌套
一个注释不能嵌套在另一个注释之内,编译器对这类问题所给出的错误信息可能是难以理解、令人迷惑的。