c++接口与实现以及分离技术.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c接口与实现以及分离技术

(1)什么是接口和实现以及区别 请问类的实现是不是如下的解释: 用类定义一个对象,就像是int i; i就是int的实现一样,定义了就存在实际容量,那么定义的对象就是类的实现。 那么接口指的是什么? 请知道的高手好像实现的解释那样举个例子,说明一下!一般地,我们称C++类声明中的“函数原型”为接口,它只是提供给了用户如何使用的具体细节,而隐藏了具体的代码;类似地,我们称类的成员函数的具体的代码为实现。如下: class Test { public: ?????void test();//此处的成员函数void test()仅仅告诉告诉用户调用它时传递几个参数,以及它返回什么值,什么作用等,并没有告诉用户test()函数到底怎么完成这些功能的,这就是接口; }; void Test::test() {...}//这里是实现,此处是test()函数具体的代码,用户无需关心它是怎么写的。 又如: Test abc;//此处定义了一个Test类型的对象abc,abc 一般我们称之为类的“实例”(不是实现)。一个没有定义对象的类,只是一个“概念”,而不是一个实体,即实际存在的东西。类的作用只有在定义了类的实例(也就是类对象)后才会体现出来(静态函数和成员例外)。仍以int i;为例,int就好比是类(class),而i好比是类的实例。在用C++写要导出类的库时,我们经常只想暴露接口,而隐藏类的实现细节。也就是说我们提供的头文件里只提供要暴露的公共成员函数的声明,类的其他所有信息都不会在这个头文件里面显示出来。这个时候就要用到接口与实现分离的技术。   下面用一个最简单的例子来说明。   ?类ClxExp是我们要导出的类,其中有一个私有成员变量是ClxTest类的对象,各个文件内容如下:   lxTest.h文件内容: class ClxTest? { public: ??? ClxTest(); ??? virtual ~ClxTest(); ? ??? void DoSomething(); };   lxTest.cpp文件内容: #include lxTest.h #include iostream 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(); }; lxExp.cpp文件内容: #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被用户大量使用的话,那么在一个大项目中,重新编译的时候我们就有时间可以去喝杯咖啡什么的了。当然上面的种种情况不是我们想看到的!你也可以想像一下用户在自己程序不

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档