C++语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。
.cpp文件被称作C++源文件,里面放的都是C++的源代码
.h文件则被称作C++头文件,里面放的也是C++的源代码,头文件不用被编译
(1)现在我来实验一下,首先创建一个头文件h1,头文件里定义了两个函数
int f2(int);
int f3(int, int);
再创建一个源文件y1,声明这两个函数
#include"h1.h"
int f2(int a)
{
//do something here...
return a + a;
}
int f3(int a, int b) {
return a + b;
}
再创建一个主函数main
#include"h1.h"
#include <iostream>
using namespace std;
int main()
{
int number2 = f2(3);
int number3 = f3(1, 2);
cout << "f2:" << "结果如下\n";
cout << number2;
cout << " \n";
cout << "f3:" << "结果如下\n";
cout << number3;
return 0;
}
结果
一个符号,在整个程序中可以被声明多次,但却要且仅要被定义一次。
为了验证,我们创建一个头文件h2,内容和h1一样。
int f2(int);
int f3(int, int);
编译,此时并没有报错
再创建一个源文件y2,来定义h2的内容
#include"h2.h"
int f3(int a, int b) {
return a + b;
}
int f2(int a)
{
//do something here...
return a + a;
}
编译,报错了
显示重复定义错误
(2)在头文件声明一个类
在h2头文件声明一个类A
class A {
public:
A();
A(int , int);
void print();
int f4();
private:
int a;
int b;
};
在y2源文件中定义这个类
#include"h2.h"
#include <iostream>
using namespace std;
A::A() {
a = 8;
b = 9;
}
A::A(int n1 , int n2) {
a = n1;
b = n2;
}
void A::print() {
cout << "我是老A\n";
}
int A::f4() {
return a + b;
}
在main函数中调用
#include"h1.h"
#include"h2.h"
#include <iostream>
using namespace std;
int main()
{
int number2 = f2(3);
int number3 = f3(1, 2);
A a;
cout << "f2:" << "结果如下\n";
cout << number2;
cout << " \n";
cout << "f3:" << "结果如下\n";
cout << number3<<"\n";
a.print();
cout << "f4:" << "结果如下\n";
int number4 = a.f4();
cout << number4 << "\n";
return 0;
}
结果:
(3)源文件的关联
创建一个头文件h3
class A f5();
再创建一个源文件y3
#include"h2.h"
#include"h3.h"
#include <iostream>
using namespace std;
A f5() {
A a = A(6, 6);
return a;
}
在main函数中调用
#include"h1.h"
#include"h2.h"
#include"h3.h"
#include <iostream>
using namespace std;
int main()
{
int number2 = f2(3);
int number3 = f3(1, 2);
A a;
cout << "f2:" << "结果如下\n";
cout << number2;
cout << " \n";
cout << "f3:" << "结果如下\n";
cout << number3<<"\n";
a.print();
cout << "f4:" << "结果如下\n";
int number4 = a.f4();
cout << number4 << "\n";
A b = f5();
b.print();
int number5 = b.f4();
cout << "f5:" << "结果如下\n";
cout << number5 << "\n";
return 0;
}
结果: