#include 和前置声明
一.编码时,我们一般会尽量避免 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 和前置声明相关推荐
- 正确使用#include和前置声明(forward declaration)
差不多一年时间没用过C++写过程序了,由于工作的需要,我又回到了C++的阵形.在工作的过程中遇到了很多麻烦,当我往工程里加一个类,而且那个类又与工程里的类相关,如有那个类型的成员变量.情况如下 //A ...
- C++中前置声明介绍
前置声明是指对类.函数.模板或者结构体进行声明,仅仅是声明,不包含相关具体的定义.在很多场合我们可以用前置声明来代替#include语句. 类的前置声明只是告诉编译器这是一个类型,但无法告知类型的大小 ...
- c++ using 前置声明_C++ 类的前置声明
今天在研究C++"接口与实现分离"的时候遇到了一个问题,看似很小,然后背后的东西确值得让人深思!感觉在学习的过程中有太多的为什么,而每一个为什么背后都隐藏着一些原理和目的,所以得多 ...
- 使用类前置声明的好处-结合Qt 4一个主窗口实例讲解
本实例实现一个基本的主窗口程序,包含一个菜单条.一个工具栏.中央可编辑窗体及状态栏. 主窗口头文件代码如下: 1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H ...
- C/C++之类的前置声明
C++中将"接口与实现分离"的两个重要目的就是"降低文件间的编译依存关系"和"隐藏对象的实现细节".而实现这一目的的关键技术就是Pimpl模 ...
- c++ using 前置声明_C++ 类声明 类前置声明范例
在编写C++程序的时候,偶尔需要用到前置声明(Forward declaration).下面的程序中,带注释的那行就是类B的前置说明.这是必须的,因为类A中用到了类B,而类B的声明出现在类A的后面.如 ...
- c/c++ 前置声明 -- typedef问题
前几天写过前置声明的问题,不过今天写代码时又遇到了同样的问题,不过是一个typedef出来的问题. 前置声明的好处很多, 比如能避免头文件互相包含的冲突, 比如有时我们在一个头文件中只需要另一个头文件 ...
- c++ 之类的前置声明
转自:http://blog.csdn.net/fjb2080/archive/2010/04/27/5533514.aspx 作者:清林,博客名:飞空静渡 刚开始学习c++的人都会遇到这样的问题: ...
- c++ using 前置声明_详解C++ 前置声明
前置声明是C/C++开发中比较常用的技巧,主要用在三种情形: 变量/常量,例如extern int var1;; 函数,例如void foo();,注意类的成员函数无法单独做前置声明: 类,例如cla ...
- C++前置声明的一个好处与用法
2019独角兽企业重金招聘Python工程师标准>>> 在C++ GUI Qt编程中有下面的一个头文件: #ifndef FINDDIALOG_H #define FINDDIALO ...
最新文章
- AutoCAD .NET Wizard下载地址
- 排序方法的分类 算法
- 从分布式到微服务,深挖Service Mesh
- Leet Code OJ 263. Ugly Number [Difficulty: Easy]
- Maven Scope取值的含义
- php析构函数使用,php析构函数__destruct()使用方法及实例讲解
- Java中super与this
- Python代码刷博客访问量
- 【动态规划】最大子段和
- NI 国家仪器 各版本软件下载链接
- PayPal提现到美国账户收35美元怎么办?最新3种解决办法!
- R 4.0 版本安装 rtools40教程,解决 Rtools is required to build R packages but is not currently installed 问题
- 美和易思——互联网技术学院返校周测题
- 第七周 项目四-队列数组
- ubuntu搭建vpn步骤
- python并发编程_《Python》并发编程
- 还在用Excel做图表?试试这个可视化工具让你的图表炫起来
- win7 64位下利用u盘重装系统
- Win10家庭版 开启Hyper-V
- 热像仪和夜视仪的区别
热门文章
- 物联网概念炒作可能只是开始
- windows下安装jmeter
- UIKeyboardType键盘
- 《编写可维护的 JavaScript》读书笔记第7章:事件处理
- Spring Cloud(Greenwich版)-01-服务生产者与服务消费者
- Apache HBase 最新发布2.0.4 ,分布式数据库
- 电脑word在哪_焦作市周边商务电脑办公入门培训
- 基于 display 和 javaScript 封装一个页面布局小插件
- PHP报错:Cannot use a scalar value as an array
- php正则验证邮箱、手机号、姓名、身份证、特殊符号等