龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C++中接口与实现分离的技术

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
在用C++写要导出类的库时,我们经常只想暴露接口,而隐藏类的实现细节。也就是说我们提供的头文件里只提供要暴露的公共成员函数的声明,类的其他所有信息都不会在这个头文件里

  在用C++写要导出类的库时,我们经常只想暴露接口,而隐藏类的实现细节。也就是说我们提供的头文件里只提供要暴露的公共成员函数的声明,类的其他所有信息都不会在这个头文件里面显示出来。这个时候就要用到接口与实现分离的技术。

  

  下面用一个最简单的例子来说明。

  

   类ClxEXP是我们要导出的类,其中有一个私有成员变量是ClxTest类的对象,各个文件内容如下:

  

   lxTest.h文件内容:  

  

  class ClxTest

  

  {

  

  public:

  

   ClxTest();

  

   virtual ~ClxTest();  

  

   void DoSomething();

  

  };  

  

   lxTest.cpp文件内容:  

  

  #include "lxTest.h"  

  

  #include

  

  using namespace std;  

  

  ClxTest::ClxTest()

  

  {

  

  }  

  

  ClxTest::~ClxTest()

  

  {

  

  }  

  

  void ClxTest::DoSomething()

  

  {

  

   cout << "Do something in class ClxTest!" DoSomething();

  

  }  

  

  通过上面的方法就实现了类ClxExp的接口与实现的分离。请注重两个文件中的注释。类ClxExp里面声明的只是接口而已,而真正的实现细节被隐藏到了类ClxImplement里面。为了能在类ClxExp中使用类ClxImplement而不include头文件lxImplement.h,就必须有前置声明class ClxImplement,而且只能使用指向类ClxImplement对象的指针,否则就不能通过编译。在发布库文件的时候,我们只需给用户提供一个头文件lxExp.h就行了,不会暴露类ClxExp的任何实现细节。而且我们对类ClxTest的任何改动,都不需要再给用户更新头文件(当然,库文件是要更新的,但是这种情况下用户也不用重新编译!)。这样做还有一个好处就是,可以在分析阶段由系统分析员或者高级程序员来先把类的接口定义好,甚至可以把接口代码写好(例如上面修改后的lxExp.h文件和lxExp.cpp文件),而把类的具体实现交给其他程序员开发。

  

   原文地址:http://blog.csdn.net/starlee/archive/2006/02/27/610825.ASPx

  

精彩图集

赞助商链接