1.C++ 常规写法,想使用别的文件中定义的类就需要#include该类的.h文件
- A.h
class A
{
public:
A(double L);
public:
double A_length;
};
- A.cpp
#include "A.h"
A::A(double L):A_length(L){};
在main.h的声明中,将A.h中的类A作为参数,一般需要#include "A.h"
-
main.h
#include "A.h"
class Box
{
public:
Box(A a);
public:
double length; // 长度
};
- main.cpp
#include <iostream>
using namespace std;
#include "main.h"
Box::Box(A a){length = a.A_length + 1;}
int main() {
A a(1.0);
cout << a.A_length << endl;;
Box b(a);
cout << b.length << endl;
return 0;
}
- 输出
1
2
2.C++ 前向声明写法
在main.h的中,不再需要#include "A.h",转而使用前向声明 class A;
-
main.h
class A;
class Box
{
public:
Box(A a);
public:
double length; // 长度
};
- main.cpp
#include <iostream>
using namespace std;
#include "main.h"
#include "A.h"
Box::Box(A a){length = a.A_length + 1;}
int main() {
A a(1.0);
cout << a.A_length << endl;;
Box b(a);
cout << b.length << endl;
return 0;
}
3.前向声明的优点:
-
加快编译速度,减少因为一个文件的变化编译整个文件
4.应该记住:当你使用前向引用声明时,你只能使用被声明的符号,而不能涉及类的任何细节。
C++的类可以进行前向声明。但是,仅仅进行前向声明而没有定义的类是不完整的,这样的类,只能用于定义指针、引用、以及用于函数形参的指针和引用。
而不能定义对象(因为此时编译器只知道这是个类,还不知道这个类的大小有多大),也不能访问类的对象,任何形式的访问都不允许(因为此时根本不知道有些什么成员)。等到类正式定义以后,就可以以各种方式使用该类了。摘录自:https://blog.csdn.net/jjjqqq123321/article/details/136570949