程序和模块
程序
programming
minimum programming
int main(){}
{}
指出函数的边界。
//
行注释
每个c++程序有且只有一个名为main的全局函数。它是程序的起点。如果main返回一个int
类型的值,是程序返回给系统的值。main()不返回任何值,系统同样会收到一个表示程序成功完成的值.main()返回非零值表示程序执行失败.
#include <iostream>
int main(){
std::cout << "Hello world!\n";
}
<<
输出符号,它的第二个参数写入第一个参数中. 在这个例子中,字符串字面值"Hello world!\n"被写入标准输出流std::cout.
std::指出名字cout可在标准库名字空间中找到.
#include <iostream>
using namespace std;
double square(double x) { return x*x}
void print_square(double x) {
cout << "square of " << x << "is" << square(x) << "\n";
}
int main() {
print_square(1.234);
}
模块
一个C程序包含许多独立开发的部分,例如函数,用户自定义类型,类层次和模板。其管理的关键就是清晰的定义。这些组成部分之间的交互。第一步也是最重要的一步是将每一个部分的接口和实现分离开来。在语言层面,C使用声明来表达接口。声明Declaration指明了使用一个函数或者一个类型所需要的东西。
declaration
double sqrt(double);
class Vector {
public:
Vector(int s);
double& operator[](int i);
int size();
private:
double* elem;
int sz;
};
这里的关键点是函数体,即函数的定义是位于别处的. 我们可能也想让Vector的表示位于别处, 不过稍后将在对此进行介绍.
定义:
definition
Vector::Vector(int x):elem{new double[x]},sz{x}{}
double& Vector::operator[](int x){return elem[i]}
int Vector::size(){return sz;}
分别编译
C++ 支持一种分别编译的概念. 用户代码只能看见所用类型和函数的声明. 这些类型和函数的定义放置在分离的源文件中,被分别编译. 这种机制有助于将一个程序组织成一组半独立的代码片段。这种分离可以用来最小化编译时间。并严格强制程序中逻辑独立的部分分离开来。库通常是一组分别编译的代码片段,如函数的集合。通常我们将说明模块接口的声明放置在一个文件中。文件名指示出预期用途。
Vector.h
class Vector {
public:
Vector(int s);
double& operator[](int i);
int size();
private:
double* elem;
int sz;
};
我们称这种文件为头文件header file
。用户将其包含到自己程序中,以便访问接口。
user.cpp
#include "Vector.h"
double sqrt_sum(){
};
为了帮助编译器确保一致性, 负责提供Vector实现部分的.cpp文件同样应该办好提供接口的.h文件.
Vector.cpp
#include "Vector.h"
Vector::Vector(int x):elem{new double[x]},sz{x}{}
double& Vector::operator[](int x){return elem[i]}
int Vector::size(){return sz;}