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

2008-02-23 05:41:18来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

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文档),而把类的具体实现交给其他程式员研发。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: VC 实现广告窗口自动关闭

下一篇: 体验C 中接口和实现分离的技术 (1)