程序
一个 C++ 程序通常需要包含多个.cpp
格式的源代码文件,作为一个编译型语言,它们先被编译器分别编译为目标文件,再通过链接器组合成可执行程序。
可执行程序和硬件/平台相关,因此 C++ 程序只有源代码可移植,即可以在不同系统上编译并运行。
C++ 是静态类型语言,所有实体在使用时编译器都必须知道它们的类型。对象的类型决定了能在该对象上执行的操作。
一个简单的 C++ 程序:
cpp
#include <iostream>
int main(void) {
std::cout << "Hello, World!\n";
return 0;
}
#include
是预处理指令,把<iostream>
中的声明拷贝到当前源代码文件中。- 每个程序都有且仅有一个
main()
函数作为函数的入口。int
是它的返回类型,非零值表示函数执行失败;void
表示它不接收任何参数,如果需要接收参数,则其参数为int argc, char** argv
。 {}
将多条语句组合成语句块,在这里作为函数体使用。- 每条语句都以
;
结尾。 std::cout
是标准输出流,它将对控制台的读写操作抽象成对文件的读写操作;<<
将后面的参数写入到前面的参数,这样就将"Hello, World!"
写入到了控制台。- 基本上所有可执行代码都要放在函数中,并被
main()
函数直接或间接地调用。
函数
函数是可被重复调用的代码块,必须先声明再调用。
函数声明需要给出:
- 函数名:必须由大小写英文字母、数字和
_
组成,首字符不能是数字。 - 返回值类型:当在函数名前面,一个函数最多只能有一个返回值,如果无返回值就用
void
。 - 参数的数量、类型:放在函数名后面的
()
里,参数之间用,
隔开。
cpp
Elem* next_elem();
void exit(int);
double pow(double, double);
调用函数时需要按顺序传入参数,参数类型必须和函数定义一致,或者可以隐式转换为目标类型:
cpp
auto result = pow(3.0, 2.0);
函数的类型由其返回值类型和参数类型决定,例如double get(const vector<double>& vec, int index);
的类型是double(const vector<double>&, int)
。函数也可以是类的成员,此时类名也是函数类型的一部份,例如char& String::operator[](int index)
的类型是char& String::(int)
。
重载指如果程序中存在同名但参数不同的函数,编译器会根据传入参数的类型进行选择:
cpp
void print(int);
void print(double);
void print(string);
void main() {
print(42);
print(3.14);
print("abc");
}
变量和类型
每个变量和表达式都有类型,类型决定了能对它们进行的操作。
这里声明一个int
类型的变量length
,并用=
初始化为0
:
cpp
int length = 0;
常用的基本数据类型包括:
bool
:布尔值,可取true
或false
。char
:字符,如`'a``int
:整数,如-273
、42
、0xff
。double
:双精度浮点数unsigned
:非负整数