Fosdccf.blog.chinaunix.net
sdccf
全部博文(19283)
Linux酷软(214)
tmp(0)
PostgreSQL(93)
Solaris(383)
AIX(173)
SCOUNIX(575)
DB2(1005)
Shell(386)
C/C++(1187)
MySQL(1750)
Sybase(465)
Oracle(3695)
Informix(548)
HP-UX(0)
IBM AIX(2)
Sun Solaris(0)
BSD(1)
Linux(8597)
SCO UNIX(23)
2011年(1)
2009年(125)
2008年(19094)
2007年(63)
clifford
linky521
曾德标
fengzhan
leon_yu
mcuflowe
yt200902
guanyuji
GY123456
snow888
carlos94
丸喵喵
sean229
cxunix
可怜的猪
cqxc413
xzzgege
wb123456
分类: C/C++
2008-04-15 21:28:15
lxImplement.cpp文件内容: #include "lxImplement.h"ClxImplement::ClxImplement(){}ClxImplement::~ClxImplement(){}void ClxImplement::lxTest(){ m_lxTest.DoSomething();}void ClxImplement::DoSomething(){ lxTest();} 然后,修改类ClxExp。 修改后的lxExp.h文件内容: // 前置声明class ClxImplement;class ClxExp { public: ClxExp(); virtual ~ClxExp(); void DoSomething(); private: // 声明一个类ClxImplement的指针,不需要知道类ClxImplement的定义 ClxImplement *m_pImpl;}; 修改后的lxExp.cpp文件内容: // 在这里包含类ClxImplement的定义头文件#include "lxImplement.h"ClxExp::ClxExp(){ m_pImpl = new ClxImplement;}ClxExp::~ClxExp(){ delete m_pImpl;}void ClxExp::DoSomething(){ m_pImpl->DoSomething();} 通过上面的方法就实现了类ClxExp的接口与实现的分离。请注意两个文件中的注释。类ClxExp里面声明的只是接口而已,而真正的实现细节被隐藏到了类ClxImplement里面。为了能在类ClxExp中使用类ClxImplement而不include头文件lxImplement.h,就必须有前置声明class ClxImplement,而且只能使用指向类ClxImplement对象的指针,否则就不能通过编译。 在发布库文件的时候,我们只需给用户提供一个头文件lxExp.h就行了,不会暴露类ClxExp的任何实现细节。而且我们对类ClxTest的任何改动,都不需要再给用户更新头文件(当然,库文件是要更新的,但是这种情况下用户也不用重新编译!)。这样做还有一个好处就是,可以在分析阶段由系统分析员或者高级程序员来先把类的接口定义好,甚至可以把接口代码写好(例如上面修改后的lxExp.h文件和lxExp.cpp文件),而把类的具体实现交给其他程序员开发。
lxImplement.cpp文件内容:
上一篇:体验C++中接口与实现分离的技术 (2)
下一篇:C++箴言:如何访问模板化基类中的名字 (1)
登录 注册