【C++】【C++ Primer】1-开始
1 编写一个简单的C++程序
1.1 函数
1.1.1 main函数
C++程序包含一个或多个函数,其中必有一个main函数。操作系统通过调用main函数来运行C++程序。
main函数的返回类型必须为int。返回值用于指示函数执行状态。返回值0表明成功,非0返回值的含义由系统定义,通常用于指出错误类型。
1.1.2 函数定义的结构
函数定义分为四部分:
- 返回类型(return type)
- 函数名(function name)
- 形参列表(parameter list)
- 函数体(function body)
1.2 数据类型
类型不仅定义了数据元素的内容,还定义了这类数据上能进行哪些运算。
1.3 代码示例
#include <iostream>
int main()
{
return 0;
}
1.3 编译、运行程序
1.3.1 编译命令
不同操作系统、编译器系统中,运行C++编译器的命令各不相同。
GNU编译器命令示例如下:
$ g++ -o simple_sample simple_sample.cpp
1.3.2 警告选项
编译器通常会提供一些选项,能够对有问题的程序结构发出警告。在GNU编译器中是-Wall选项。
2 初识输入输出
2.1 标准库iostream
C++没有定义任何输入输出(IO)语句,而是包含了一个名为iostream的标准库(Standard Library)来提供IO机制。
iostream包含两个基础类型:
- istream:输入流
- ostream:输出流
一个流就是一个字符序列,要么从IO设备读出,要么写入IO设备。之所以用“流”来表述,是因为随着时间的推移,字符是顺序生成或消耗的。
2.2 标准输入输出对象
标准库定义了四个IO对象:
标准输入输出对象 | 用途 | 类型 |
---|---|---|
cin | 标准输入 | istream |
cout | 标准输出 | ostream |
cerr | 标准错误。输出警告和错误信息 | ostream |
clog | 输出程序运行时的一般信息 | ostream |
2.3 输出运算符、输入运算符
<<称作输出运算符,其左侧的运算对象必须是一个ostream对象。>>称作输入运算符,其左侧的运算对象必须是一个istream对象。
<<和>>的运算结果都是其左侧对象,因此可以连续使用。
2.4 操纵符(manipulator)
endl就是操纵符,其作用是结束当前行,并将缓冲区中的内容刷到设备中,从而保证程序的输出都真正写入输出流,而非在内存中等待。
2.5 命名空间和作用于运算符。
我们在使用cin、cout时,还添加了前缀std::。其中std是命名空间,::是作用域运算符。
std::指出,cin、cout是定义在名为std的命名空间中的。标准库定义的所有名字都在命名空间std中。
命名空间可以避免名字定义冲突。
2.6 代码示例
提示用户输入两个数,然后输出它们的和:
#include <iostream>
int main()
{
int num1 = 0;
int num2 = 0;
std::cout << "Please enter two numbers:" << std::endl;
std::cin >> num1 >> num2;
std::cout << "The sum of " << num1 << " and "
<< num2 << " is " << num1 + num2 << std::endl;
return 0;
}
3 注释
3.1 单行注释
// 单行注释
3.2 多行注释
多行注释也称为界定符注释,使用时注意不可嵌套。
/*
* 多行注释1
* 多行注释2
*/
4 控制流
4.1 while语句
4.2 for语句
4.3 代码示例——读取数量不定的输入数据
#include <iostream>
int main()
{
int sum = 0;
int val = 0;
while (std::cin >> val) {
sum += val;
}
std::cout << "Sum is: " << sum << std::endl;
return 0;
}
2.3小节中提到,输入操作符>>返回其左侧运算对象,在本例中即为std::cin。因此while循环实际检测的就是std::cin。
使用istream对象作为条件,效果是检测流的状态。如果流是有效的,此时条件为真。如果遇到EOF或遇到无效输入(本例中是遇到非int类型的数据),istream对象的状态会变为无效,此时条件为假。
Unix Like系统中,Ctrl+D即可输入EOF。
4.4 if语句
4.5 类简介
在C++中,通过定义类(class)来定义自己的数据结构。一个类定义了一个类型,以及与其相关联的一组操作。