||
refer:
1 http://blog.sina.com.cn/s/blog_6e04a8350100sonp.html
2 http://blog.csdn.net/a117653909/article/details/6719021
3 http://blog.chinaunix.net/uid-20761674-id-3155498.html
4 http://www.cnblogs.com/MuyouSome/p/3388242.html
----------------------
类相互包含,很头疼,A 中有B,B中有A。 因为在A对象中要开辟一块属于B的空间,而B中又有A的空间,是一个逻辑错误,无法实现的。
-----A.h----------------
#include "B.h"
class A{ public: B b;};
------B.h---------------------
#include "A.h"
class B{ public: A a;};
--------------
这样的话,首先#include 不停的循环暂开,
你可能会想到ifndef机制,或者pragma once机制
----展开成这样-----------
class B{ public: A a;};
class A{ public: B b;};
-----
b.a.b.a.b.a.b......
很有点子子孙孙无穷尽之状
-----------------------------------------
两者的定义,至少有一方是使用指针,或两者都使用指针,但是决不能两者都定义实体对象。
-------------
因为C++编译器自上而下编译源文件的时候 ,这个概念非常重要!!!
--------------
在一些大的工程中,可能会包含几十个基础类,免不了之间会互相引用 ( 不满足继承关系,而是组合关系 ) 。
编码时,我们一般会尽量避免 include 头文件,而是采用声明 class XXX 。 但有时候还是必须用 Include 头文件,那么,两者的划分在于什么呢?
二:一般原则:
a. 头文件中尽量少 include, 如果可以简单申明 class clsOld; 解决,那最好。减少没有必要的 include;
b. 实现文件中也要尽量少 include, 不要 include 没有用到的头文件。
三:那什么时候可以只是简单声明 class clsOld 呢?
简单的说:不需要知道 clsOld 的内存布局的用法都可以 ( 静态成员除外 ) ,也就是讲如果是指针或引用方式的 都行。
比如:
clsOld * m_pOld; // 指针占 4 个字节长
clsOld & test(clsOld * pOld) {return *pOld};
一切 OK 。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-20 04:53
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社