当前位置: 首页 > article >正文

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

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


http://www.kler.cn/a/471255.html

相关文章:

  • Linux系统自动化sh脚本
  • Ubuntu 下载安装 kibana8.7.1
  • 路由器的转发表
  • STM32-笔记35-DMA(直接存储器访问)
  • Excel中公式和函数的区别
  • linux-27 发行版以及跟内核的关系
  • 【ABAP开发环境】(三)ABAP GIT
  • 根据python代码自动生成类图的实现方法[附带python源码]
  • Python实现应用决策树的实例程序
  • model_selection.cross_val_score函数介绍
  • CES 2025:ROG打造极致游戏体验
  • python-leetcode-加油站
  • VLMs之Agent之CogAgent:《CogAgent: A Visual Language Model for GUI Agents》翻译与解读
  • 《医院项目驻场半月记:从憧憬到反思的旅程》
  • AWS re:Invent 2024 现场实录 - It‘s all about Scale
  • Mac 安装psycopg2出错:Error:pg_config executable not found的解决
  • 黄仁勋演讲总结(2种显卡,1个开源大模型,1个数据采集平台)
  • 决策树模型与随机森林一文入门,原理、R语言示例
  • Kubernetes Ingress:流量管理的利器
  • 人工智能 前馈神经网络练习题
  • 文献阅读分享:跨域顺序推荐中的用户检索与大语言模型集成
  • L28.【LeetCode笔记】移动零(三种解法)
  • 基于Spring Boot的高校门禁管理系统
  • 【VUE】a链接下载跨域文件直接打开而非下载(解决办法)
  • Win11 上使用 Qume 搭建银河麒麟V10 arm版虚拟机
  • 国产编辑器EverEdit - 两种删除空白行的方法