接口实现和继承实现

接口实现和继承实现

ID:13555992

大小:28.05 KB

页数:13页

时间:2018-07-23

接口实现和继承实现_第1页
接口实现和继承实现_第2页
接口实现和继承实现_第3页
接口实现和继承实现_第4页
接口实现和继承实现_第5页
资源描述:

《接口实现和继承实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、[C++]接口继承与实现继承 接口继承与实现继承所谓接口继承,就是派生类只继承函数的接口,也就是声明;而实现继承,就是派生类同时继承函数的接口和实现。我们都很清楚C++中有几个基本的概念,虚函数、纯虚函数、非虚函数。虚函数:虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。——MSDN虚函数用来表现基类和派生类的成员函数之间的一种关系. 虚函数的定义在基类中进行,在需要定义为虚函数的成员函数的声明前冠以关键字 virtual. 基类中的某个成

2、员函数被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义. 在派生类中重新定义时,其函数原型,包括返回类型,函数名,参数个数,参数类型及参数的先后顺序,都必须与基类中的原型完全相同. 虚函数是重载的一种表现形式,是一种动态的重载方式.纯虚函数:纯虚函数在基类中没有定义,它们被初始化为0。 任何用纯虚函数派生的类,都要自己提供该函数的具体实现。 定义纯虚函数 virtualvoidfun(void)=0;非虚函数:一般成员函数,无virtual关键字修饰。 至于为什么要定义这些函数,我们可以将虚函数、纯虚函数和非虚

3、函数的功能与接口继承与实现继承联系起来:声明一个纯虚函数(purevirtual)的目的是为了让派生类只继承函数接口,也就是上面说的接口继承。纯虚函数一般是在不方便具体实现此函数的情况下使用。也就是说基类无法为继承类规定一个统一的缺省操作,但继承类又必须含有这个函数接口,并对其分别实现。但是,在C++中,我们是可以为纯虚函数提供定义的,只不过这种定义对继承类来说没有特定的意义。因为继承类仍然要根据各自需要实现函数。通俗说,纯虚函数就是要求其继承类必须含有该函数接口,并对其进行实现。是对继承类的一种接口实现要求,但并不提供缺省

4、操作,各个继承类必须分别实现自己的操作。声明非纯虚函数(impurevirtual)的目的是让继承类继承该函数的接口和缺省实现。与纯虚函数唯一的不同就是其为继承类提供了缺省操作,继承类可以不实现自己的操作而采用基类提供的默认操作。声明非虚函数(non-virtual)的目的是为了令继承类继承函数接口及一份强制性实现。相对于虚函数来说,非虚函数对继承类要求的更为严格,继承类不仅要继承函数接口,而且也要继承函数实现。也就是为继承类定义了一种行为。 总结:纯虚函数:要求继承类必须含有某个接口,并对接口函数实现。虚函数:继承类必须含

5、有某个接口,可以自己实现,也可以不实现,而采用基类定义的缺省实现。非虚函数:继承类必须含有某个接口,必须使用基类的实现。C++箴言:接口继承和实现继承 (public)inheritance这个表面上简单易懂的观念,一旦被近距离审视,就会被证明是由两个相互独立的部分组成的:inheritanceoffunctioninterfaces(函数接口的继承)和inheritanceoffunctionimplementations(函数实现的继承)。这两种inheritance之间的差异正好符合本书Introduction中论述的

6、functiondeclarations(函数声明)和functiondefinitions(函数定义)之间的差异。   作为一个class的设计者,有的时候你想要derivedclasses只继承一个memberfunction的interface(declaration)。有的时候你想要derivedclasses既继承interface(接口)也继承implementation(实现),但你要允许它们替换他们继承到的implementation。还有的时候你想要derivedclasses继承一个函数的interfac

7、e(接口)和implementation(实现),而不允许它们替换任何东西。   为了更好地感觉这些选择之间的不同之处,考虑一个在图形应用程序中表示几何图形的classhierarchy(类继承体系):   classShape{   public:   virtualvoiddraw()const=0;   virtualvoiderror(conststd::string&msg);   intobjectID()const;   ...   };   classRectangle:publicShape{...};  

8、 classEllipse:publicShape{...};   Shape是一个abstractclass(抽象类),它的purevirtualfunction(纯虚拟函数)表明了这一点。作为结果,客户不能创建Shapeclass的实例,只能创建从它继承的classes的实例。但是,S

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。