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
- 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
- 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
- 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
- using namespace std;
-
- A f5() {
- A a = A(6, 6);
- return a;
- }
在main函数中调用
- #include"h1.h"
- #include"h2.h"
- #include"h3.h"
- #include
- 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;
- }
结果: