[ 永远的UNIX::UNIX技术资料的宝库 ]

首页 > 编程技术 > C/C++ > 正文
 

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

作者:sixth 来源:赛迪论坛 (2006-03-16 17:31:44)

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.fanqiang.com)



 
 相关文章
如何使用NAT? 2001-04-15 19:56:34
技巧:取消^M字符 2001-04-15 21:30:35
技巧:只列子目录的方法 2001-04-15 21:31:41
技巧:利用Find命令改变所有权 2001-04-15 21:32:32
技巧:你知道怎么查看文件中间一段吗? 2001-04-15 21:33:56
技巧:计算文件数和目录数 2001-04-15 21:34:33
技巧:把文件名当中含有特殊字符的文件删除 2001-04-16 09:56:21
Lilo.conf (LILO 配置文件) 手册 2001-04-16 11:42:35
什么是CHROOT? 2001-04-16 13:51:59
FreeBSD中/etc下的文件简介 2001-04-16 14:05:44
如何设定防火墙IP Firewall 2001-04-16 14:19:47
如何使用IP Alias? 2001-04-16 14:21:02
如何在 FreeBSD 上使用 CD 刻录机? 2001-04-16 14:38:29
Console中使用鼠标进行Copy-Paste 2001-04-16 14:45:30
FreeBSD如何跑diskless? 2001-04-16 14:56:43
如何使用一块新加的SCSI硬盘? 2001-04-16 15:01:14
何谓 core? 2001-04-16 15:44:06
rn(1)或ctime(3)中的刮弧里的数目意谓什么呢? 2001-04-19 10:21:59
要怎么设定 prompt 才会显示出目前所在的目录? 2001-04-19 10:26:54
为什么我用 "rsh host command" 会有一些奇怪的讯息出现? 2001-04-19 10:32:28
 

★  感谢所有的作者为我们学习技术知识提供了一条捷径  ★
www.fanqiang.com