C 箴言:接口继承和实现继承.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C 箴言:接口继承和实现继承

C++箴言:接口继承和实现继承 (public) inheritance 这个表面上简单易懂的观念,一旦被近距离审视,就会被证明是由 两个相互独立的部分组成的:inheritance of function interfaces(函数接口的继承)和 inheritance of function implementations(函数实现的继承)。这两种 inheritance 之 间的差异正好符合本书 IntrodUCtion 中论述的 function declarations(函数声明)和 function definitions(函数定义)之间的差异。 作为一个 class 的设计者,有的时候你想要 derived classes 只继承一个 member function 的 interface (declaration)。有的时候你想要 derived classes 既继 承 interface(接口)也继承 implementation(实现),但你要允许它们替换他们继承到的 implementation。还有的时候你想要 derivedclasses 继承一个函数的 interface(接口) 和 implementation(实现),而不允许它们替换任何东西。 为了更好地感觉这些选择之间的不同之处,考虑一个在图形应用程序中表示几何图 形的 class hierarchy(类继承体系): class Shape { public: virtual void draw() const = 0; virtual void error(const std::string msg); int objectID() const; ... }; class Rectangle: public Shape { ... }; class Ellipse: public Shape { ... }; Shape 是一个 abstract class(抽象类),它的 pure virtual function(纯虚拟 函数)表明了这一点。作为结果,客户不能创建 Shape class 的实例,只能创建从它继承 的 classes 的实例。但是,Shape 对所有从它(公有)继承的类施加了非常强大的影响, 因为 成员函数 interfaces are always inherited。就像 Item 32 解释的,public inheritance 意味着 is-a,所以对一个 base class 来说成立的任何东西,对于它的 derivedclasses 也必须成立。因此,如果一个函数适用于一个 class,它也一定适用于它 的 derived classes。 Shapeclass 中声明了三个函数。第一个,draw,在一个明确的显示设备上画出当 前对象。第二个,error,如果 memberfunctions 需要报告一个错误,就调用它。第三个, objectID,返回当前对象的唯一整型标识符。每一个函数都用不同的方式声明:draw 是一 个 pure virtual function(纯虚拟函数);error 是一个 simple (impure?) virtual function(简单虚拟函数);而 objectID 是一个 non-virtual function(非虚拟函数)。 这些不同的声明暗示了什么呢? 考虑第一个 pure virtual function(纯虚拟函数)draw: class Shape { public: virtual void draw() const = 0; ... }; purevirtualfunctions(纯虚拟函数)的两个最显著的特性是它们必须被任何继 承它们的具体类重新声明,和抽象类中一般没有它们的定义。把这两个特性加在一起,你应 该认识到。 声明一个 purevirtualfunction(纯虚拟函数)的目的是使 derivedclasses 继 承一个函数 interface only。 这就使 Shape::draw function 具有了完整的意义,因为它要求所有的 Shape 对 象必须能够画出来是合情合理的,但是 Shape class 本身不能为这个函数提供一个合乎情 理的缺省的实现。例如,画一个椭圆的算法

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档