C++ 提升编译速度的利器:前向声明

发布于:2025-02-10 ⋅ 阅读:(45) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到