| #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文档),而把类的具体实现交给其他程式员研发。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




