编写一个简单的 C++ 程序
最简单的 main 函数:
int main(){
return 0;
}
一个函数的定义包含四部分,虽然main函数在某种程度上比较特殊,但其定义与其他函数是一样的。
- 返回类型(return type)
- 函数名(functionname)
- 一个括号包围的形参列表(parameter list,允许为空)
- 函数体(function body)
main函数的返回类型必须为int,即整数类型。int类型是一种内置类型(built-intype),即语言自身定义的类型。
当return语句包括一个值时,此返回值的类型必须与函数的返回类型相容。
在本例中,main的返回类型是int,而返回值0的确是一个int类型的值。
在大多数系统中,main的返回值被用来指示状态。返回值0表明成功,非0的返回值的含义由系统定义,通常用来指出错误类型。
编译、运行程序
程序源文件命名约定
无论使用命令行界面或者IDE,大多数编译器都要求程序源码存储在一个或多个文件中。程序文件通常被称为源文件(source file)。
在大多数系统中,源文件的名字以一个后缀为结尾,后缀是由一个句点后接一个或多个字符组成的。后缀告诉系统这个文件是一个C++程序。
不同编译器使用不同的后缀命名约定,最常见的包括.cc、.cxx、.cpp、.cp及.C。
编译器生成一个可执行文件。假定main程序保存在文件prog1.cpp,Windows系统会将这个编译器生成的可执行文件命名为prog1.exe。UNIX系统中的编译器通常将可执行文件命名为a.out。
g++ -o prog1.exe prog1.cpp
-o prog1.exe
是编译器参数,指定了可执行文件的文件名。在不同的操作系统中,此命令生成一个名为prog1或prog1.exe的可执行文件:
- 在UNIX系统中,可执行文件没有后缀;
- 在Windows系统中,后缀为.exe;
- 如果省略了-o prog1参数,在UNIX系统中编译器会生成一个名为a.out的可执行文件,在Windows系统中则会生成一个名为a.exe的可执行文件
运行微软Visual Studio 2010编译器的命令为cl:
cl /EHsc prog1.cpp
命令cl调用编译器,/EHsc是编译器选项,用来打开标准异常处理。微软编译器会自动生成一个可执行文件,其名字与第一个源文件名对应。可执行文件的文件名与源文件名相同,后缀为.exe。在此例中,可执行文件的文件名为prog1.exe。
初识输入输出
标准输入输出对象
标准库定义了4个IO对象。
- 处理输入,使用一个名为
cin
的istream
类型的对象,也被称为标准输入(standard input)。 - 对于输出,使用一个名为
cout
的ostream
类型的对象,也被称为标准输出(standard output)。 - 标准库还定义了其他两个
ostream
对象,名为cerr
和clog
。通常用cerr来输出警告和错误消息,也被称为标准错误(standard error),而clog
用来输出程序运行时的一般性信息。
#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;
}
#include <iostream>
告诉编译器我们想要使用iostream
库。尖括号中的名字(本例中是iostream
)指出了一个头文件(header)。每个使用标准库设施的程序都必须包含相关的头文件。#include
指令和头文件的名字必须写在同一行中。
通常情况下,#include
指令必须出现在所有函数之外。一般将一个程序的所有#include
指令都放在源文件的开始位置。
前缀std::
指出名字cout
和endl
是定义在名为std
的命名空间(namespace)中的。命名空间可以帮助我们避免不经意的名字定义冲突,以及使用库中相同名字导致的冲突。标准库定义的所有名字都在命名空间std
中。
注释简介
C++中注释的种类
单行注释:单行注释以双斜线(//)开始,以换行符结束。当前行双斜线右侧的所有内容都会被编译器忽略,这种注释可以包含任何文本,包括额外的双斜线。
界定符对注释:/*和*/。这种注释以/*开始,以*/结束,可以包含除*/外的任意内容,包括换行符。编译器将落在/*和*/之间的所有内容都当作注释。注释界定符不能嵌套。
类简介
每个类实际上都定义了一个新的类型,其类型名就是类名。因此,比如Sales_item
类定义了一个名为Sales_item
的类型。与内置类型一样,可以定义类类型的变量。当写下如下语句,是想表达item
是一个Sales_item
类型的对象。
Sales_item item;
类型。与内置类型一样,可以定义类类型的变量。当写下如下语句,是想表达item
是一个Sales_item
类型的对象。
Sales_item item;