欢迎来到天天文库
浏览记录
ID:55670486
大小:79.00 KB
页数:9页
时间:2020-05-24
《c接口与实现以及分离技术.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、(1)什么是接口和实现以及区别请问类的实现是不是如下的解释:用类定义一个对象,就像是inti;i就是int的实现一样.定义了就存在实际容危・那么定义的对象就是类的实现。那么接口指的是什么?请知道的高手好像'实现'的解释那样举个例子,说明一下!一般地,我们称C++类声明中的“函数原型”为接口,它只是提供给了用尸如何使用的具体细节,而隐藏了具体的代码;类似地,我们称类的成员函数的具体的代码为实现。如下:classTest(public:voidtest();〃此处的成员函数voidtest。仅仅告诉告诉用户调用它时传递几个参数,以及它返回什
2、么值,什么作用等,并没有告诉用户test。函数到底怎么完成这些功能的,这就是接口:);voidTest::test(){...}//这里是实现,此处是test。函数具体的代码,用户无需关心它是怎么写的。又如:Testabc//jlt处定义了一个Test类型的对象abc.abc一般我们称之为类的“实例"(不是实现)°一个没有定义对象的类,只是一个“概念”,而不是一个实体,即实际存在的东西。类的作用只有在定义了类的实例(也就是类对象)后才会体现出来(静态函数和成员例外)。仍以inti;为例,int就好比是类(class),而i好比是类的实例
3、。(2)接口和实现分离技术在用C++写要导出类的库时,我们经常只想暴露接口,而隐藏类的实现细节。也就是说我们提供的头文件里只提供要暴露的公共成员函数的声明,类的其他所有信息都不会在这个头文件里面显示出来°这个时候就要用到接口与实现分离的技术°下而用一个最简单的例子来说明。类ClxExp是我们要导出的类,其中有一个私有成员变量是ClxTest类的对象,各个文件内容如下:IxTest.h文件内容:classClxTest(public:ClxTest();virtual"ClxTest();voidDoSomethingO;);IxTest
4、.cpp文件内容:^include"IxTest.h”♦includeusingnamespacestd;ClxTest::~ClxTest()voidClxTest::DoSomethingO(cout«〃DosomethinginclassClxTest!«endl:)///////////////////////////////////////////////////////////////////////////////IxExp.h文件内容:^include"IxTest,h”classClxExp{pub
5、lie:ClxExp();virtual~ClxExp();voidDoSomethingO;private:ClxTestmIxTest;voidIxTest(););IxExp.epp文件内容:#include"IxExp.h〃ClxExp::ClxExpOClxExp::^ClxExpO//其实该方法在这里并没有必要,这样只是为了说明调用关系voidClxExp::IxTest()mIxTest.DoSomethingO;voidClxExp::DoSomethingO{IxTest();)为了让用户能使用我们的类ClxExp,我
6、们必须提供IxExp.h文件,这样类ClxExp的私有成员也暴露给用户了c而且,仅仅提供IxExp.h文件是不够的,因为IxExp.h文件include了IxTest.h文件,在这种情况下,我们还要提供IxTest.h文件。那样ClxExp类的实现细节就全暴露给用户了。另外,当我们对类ClxTest做了修改(如添加或删除一些成员变量或方法)时,我们还要给用户更新IxTest.h文件,而这个文件是跟接口无关的。如果类ClxExp里而有很多像mIxTest那样的对象的话,我们就要给用户提供N个像IxTest.h那样的头文件,而且其中任何一个
7、类有改动,我们都要给用户更新头文件。还有一点就是用户在这种情况下必须进行重新编译!上面是非常小的一个例子,重新编译的时间可以忽略不计。但是,如果类ClxExp被用户大量使用的话,那么在一个大项目中,重新编译的时候我们就有时间可以去喝杯咖啡什么的了。当然上而的种种情况不是我们想看到的!你也可以想像一下用户在自己程序不用改动的情况下要不停的更新头文件和编译时,他们心里会骂些什么。其实对用户来说,他们只关心类ClxExp的接口DoSomothingO方法。那我们怎么才能只暴露类ClxExp的DoSomething()方法而不又产生上面所说的那
8、些问题呢?答案就是一一接口与实现的分离。我可以让类ClxExp定义接口,而把实现放在另外一个类里面。下面是具体的方法:首先,添加一个实现类Clxlmplement来实现ClxExp的所有功能。注意:类Clx
此文档下载收益归作者所有