体验C 中接口和实现分离的技术 (1)
2008-02-23 05:41:18来源:互联网 阅读 ()
下面用一个最简单的例子来说明。
类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!" << endl; } //////////////////////////////////////////////////////////////////////////// |
lxExp.h文档内容:
#include "lxTest.h" class ClxExp { public: ClxExp(); virtual ~ClxExp(); void DoSomething(); private: ClxTest m_lxTest; void lxTest(); }; |
#include "lxExp.h" ClxExp::ClxExp() {} ClxExp::~ClxExp() {} // 其实该方法在这里并没有必要,我这样只是为了说明调用关系 void ClxExp::lxTest() { m_lxTest.DoSomething(); } void ClxExp::DoSomething() { lxTest(); } |
为了让用户能使用我们的类ClxExp,我们必须提供lxExp.h文档,这样类ClxExp的私有成员也暴露给用户了。而且,仅仅提供lxExp.h文档是不够的,因为lxExp.h文档include了lxTest.h文档,在这种情况下,我们还要提供lxTest.h文档。那样ClxExp类的实现细节就全暴露给用户了。另外,当我们对类ClxTest做了修改(如添加或删除一些成员变量或方法)时,我们还要给用户更新lxTest.h文档,而这个文档是跟接口无关的。假如类ClxExp里面有很多像m_lxTest那样的对象的话,我们就要给用户提供N个像lxTest.h那样的头文档,而且其中任何一个类有改变,我们都要给用户更新头文档。更有一点就是用户在这种情况下必须进行重新编译!
上面是很小的一个例子,重新编译的时间能够忽略不计。但是,假如类ClxExp被用户大量使用的话,那么在一个大项目中,重新编译的时候我们就有时间能够去喝杯咖啡什么的了。当然上面的种种情况不是我们想看到的!您也能够想像一下用户在自己程式不用改变的情况下要不停的更新头文档和编译时,他们心里会骂些什么。其实对用户来说,他们只关心类ClxExp的接口DoSomething()方法。那我们怎么才能只暴露类ClxExp的DoSomething()方法而不又产生上面所说的那些问题呢?答案就是--接口和实现的分离。我能够让类ClxExp定义接口,而把实现放在另外一个类里面。下面是具体的方法:
首先,添加一个实现类ClxImplement来实现ClxExp的任何功能。注意:类ClxImplement有着跟类ClxExp相同的公有成员函数,因为他们的接口要完全一致。
lxImplement.h文档内容:
#include "lxTest.h" class ClxImplement { public: ClxImplement(); virtual ~ClxImplement(); void DoSomething(); private: ClxTest m_lxTest; void lxTest(); }; |
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 体验C 中接口和实现分离的技术 (2)
下一篇: VC 中的Progress控件如何使用
- 体验C 中接口和实现分离的技术 (2) 2008-02-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash