一.编码时,我们一般会尽量避免 include 头文件,而是采用声明 class XXX 。

1.避免无必要的重编译 ( 在头文件发生变更时 ) 。 工程较大,低速机,或基础类经常变更 ( 不合理的设计吧 )

2.采用声明可降低代码 (class) 之间的藕合度,这也是面向对象设计的一大原则。

二.一般原则:
a. 头文件中尽量少 include, 如果可以简单申明 class clsOld; 解决,那最好。减少没有必要的 include;
b. 实现文件中也要尽量少 include, 不要 include 没有用到的头文件。

三.那什么时候可以只是简单声明 class clsOld 呢?
简单的说:不需要知道 clsOld 的内存布局的用法都可以 ( 静态成员除外 ) ,也就是讲如果是指针或引用方式的 都行。
比如:在类A 含有类clsOld  指针变量,即类与类是关联关系,特别是双向关联。则在类A头文件上 使用class clsOld ;即可

clsOld * m_pOld;    // 指针占 4 个字节长
   clsOld & test(clsOld * pOld) {return *pOld};

四.什么时候不能简单声明 class clsOld ,必须 include 呢?
       不满足三的情况下:
       比如:在类A 含有类clsOld 对象, 即类与类是聚合关系
         clsOld m_Objold;  // 不知道占据大小,必须要通过它的具体声明来计算
       原因很简单,想想你要计算 sizeof(classNew) ,但连 clsOld 的 size 都不知道,编译器显然会无能为力。

所以:

1 :如果有共同相关依赖 ( 必须 include) 的类,比如 类A,B 都依赖类 D 可以放在一起(写在同一个头文件即可),然后直接 Include "d"

2 :如果 A 类依赖 D B 类不依赖 D ,可以把它们分开两个头文件。各自 Include

3 :类中尽量采用指针或引用方式调用其它类,这样就可以只声明 class xxx 了。并且这也符合资源最优 利用,更利于使用多态

#include 和前置声明相关推荐

  1. 正确使用#include和前置声明(forward declaration)

    差不多一年时间没用过C++写过程序了,由于工作的需要,我又回到了C++的阵形.在工作的过程中遇到了很多麻烦,当我往工程里加一个类,而且那个类又与工程里的类相关,如有那个类型的成员变量.情况如下 //A ...

  2. C++中前置声明介绍

    前置声明是指对类.函数.模板或者结构体进行声明,仅仅是声明,不包含相关具体的定义.在很多场合我们可以用前置声明来代替#include语句. 类的前置声明只是告诉编译器这是一个类型,但无法告知类型的大小 ...

  3. c++ using 前置声明_C++ 类的前置声明

    今天在研究C++"接口与实现分离"的时候遇到了一个问题,看似很小,然后背后的东西确值得让人深思!感觉在学习的过程中有太多的为什么,而每一个为什么背后都隐藏着一些原理和目的,所以得多 ...

  4. 使用类前置声明的好处-结合Qt 4一个主窗口实例讲解

    本实例实现一个基本的主窗口程序,包含一个菜单条.一个工具栏.中央可编辑窗体及状态栏. 主窗口头文件代码如下: 1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H ...

  5. C/C++之类的前置声明

    C++中将"接口与实现分离"的两个重要目的就是"降低文件间的编译依存关系"和"隐藏对象的实现细节".而实现这一目的的关键技术就是Pimpl模 ...

  6. c++ using 前置声明_C++ 类声明 类前置声明范例

    在编写C++程序的时候,偶尔需要用到前置声明(Forward declaration).下面的程序中,带注释的那行就是类B的前置说明.这是必须的,因为类A中用到了类B,而类B的声明出现在类A的后面.如 ...

  7. c/c++ 前置声明 -- typedef问题

    前几天写过前置声明的问题,不过今天写代码时又遇到了同样的问题,不过是一个typedef出来的问题. 前置声明的好处很多, 比如能避免头文件互相包含的冲突, 比如有时我们在一个头文件中只需要另一个头文件 ...

  8. c++ 之类的前置声明

    转自:http://blog.csdn.net/fjb2080/archive/2010/04/27/5533514.aspx 作者:清林,博客名:飞空静渡 刚开始学习c++的人都会遇到这样的问题: ...

  9. c++ using 前置声明_详解C++ 前置声明

    前置声明是C/C++开发中比较常用的技巧,主要用在三种情形: 变量/常量,例如extern int var1;; 函数,例如void foo();,注意类的成员函数无法单独做前置声明: 类,例如cla ...

  10. C++前置声明的一个好处与用法

    2019独角兽企业重金招聘Python工程师标准>>> 在C++ GUI Qt编程中有下面的一个头文件: #ifndef FINDDIALOG_H #define FINDDIALO ...

最新文章

  1. AutoCAD .NET Wizard下载地址
  2. 排序方法的分类 算法
  3. 从分布式到微服务,深挖Service Mesh
  4. Leet Code OJ 263. Ugly Number [Difficulty: Easy]
  5. Maven Scope取值的含义
  6. php析构函数使用,php析构函数__destruct()使用方法及实例讲解
  7. Java中super与this
  8. Python代码刷博客访问量
  9. 【动态规划】最大子段和
  10. NI 国家仪器 各版本软件下载链接
  11. PayPal提现到美国账户收35美元怎么办?最新3种解决办法!
  12. R 4.0 版本安装 rtools40教程,解决 Rtools is required to build R packages but is not currently installed 问题
  13. 美和易思——互联网技术学院返校周测题
  14. 第七周 项目四-队列数组
  15. ubuntu搭建vpn步骤
  16. python并发编程_《Python》并发编程
  17. 还在用Excel做图表?试试这个可视化工具让你的图表炫起来
  18. win7 64位下利用u盘重装系统
  19. Win10家庭版 开启Hyper-V
  20. 热像仪和夜视仪的区别

热门文章

  1. 物联网概念炒作可能只是开始
  2. windows下安装jmeter
  3. UIKeyboardType键盘
  4. 《编写可维护的 JavaScript》读书笔记第7章:事件处理
  5. Spring Cloud(Greenwich版)-01-服务生产者与服务消费者
  6. Apache HBase 最新发布2.0.4 ,分布式数据库
  7. 电脑word在哪_焦作市周边商务电脑办公入门培训
  8. 基于 display 和 javaScript 封装一个页面布局小插件
  9. PHP报错:Cannot use a scalar value as an array
  10. php正则验证邮箱、手机号、姓名、身份证、特殊符号等