手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

体验C 中接口和实现分离的技术 (2)

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
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文档),而把类的具体实现交给其他程式员研发。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!