【彩神总代-彩神8总代】了解C++的装、继承和多态

  • 时间:
  • 浏览:0
  • 来源:极速大发快3-1分快3官方

了解C++的装、继承和多态

  • 2019/7/1 10:56:17
  • 类型:原创
  • 来源:电脑报
  • 报纸编辑:电脑报
  • 作者:

【电脑报在线】近期重新看多一下C++,一是感觉清晰了其他,二是其实若是换个深度1看励志的话 ,会有不一样的体会,但是 也容易记住C++中的其他价值形式。

近期重新看多一下C++,一是感觉清晰了其他,二是其实若是换个深度1看励志的话 ,会有不一样的体会,但是 也容易记住C++中的其他价值形式。本文就试图将集合论中的相关知识引入到C++的封装、继承、多态上,我们 歌词 对它有个重新的认识。

从代码的深度1而言,我认为计算机语言完全都是可不免的处置以下另另一一有多少哪此的什么的问题:

 1.为了构建大型的应用任务管理器,时要将代码模块化。C++中,由类的封装来实现。

 2.为了减少代码的冗余,时要实现代码共享。C++中,由类的继承和多态来实现。

一、封装

C语言中,代码之间的关系完全都是函数式的调用。这顶端牵扯到对数据的操作,若操作的完全都是局部变量,那一切都太平了。但若是多少函数操作同另另一一有多少非局部变量,考虑到模块化,没办法 就要将变量和操作变量的函数整合在一并,这统统我C++中的封装。

C++顶端引入了class的概念,目的是封装数据和数据上的操作,使其成为另另一一有多少独立的模块。若是将你這個独立的模块(代码和数据)想象成集合,那个class A的集合为:

图1

此时若再引入另另一一有多少class B,则有下面并不是但是 性,情况报告三、四实际上這個。

 

图2

情况报告一,只时要封装就足够了。处置情况报告二、三、四时,为了考虑代码共享,时要引入继承机制。

二、继承

我们 先考虑情况报告二,但是 A和B有公共代码(成员函数但是 是成员变量),故通常考虑将公共的次责定义为class C,但是 由A、B去继承它。

图3

对于情况报告三、四,我们 不时要演变,直接让A继承B,但是 B继承A即可。

若,此时引入class D,没办法 情况报告就会复杂统统。简单期间,以情况报告二为扩展,考虑添加class D后的某并不是。后续过多再发现,情况报告三、四這個。

图4

此时,最合理的法律土办法是引入八个类,class E, class F, class G, class H,如下图。E为基类,F、G、H为一级子类、A、B、D为二级子类。

图5

但是 ,你這個处置方案有哪此的什么的问题:

1.若是再添加class I,class J,那复杂度就可想而知了。

2.其实代码冗余是消除了,但是 引入了八个类,也其实特别多,更严重励志的话 会原困分析“类泛滥”。

为了能统一处置添加的类D,我们 将图四拆分成D和A,以及D和B的关系。没办法 就转化为图二中的并不是:情况报告二。

图6

图六中,class H表示D和A的公共次责,class G表示D和B的公共次责。此种解法其实有代码冗余,但简单了其他,事实上,我们 统统前一天处置类,统统我没办法 处置的。

在你這個情况报告下,若是添加class I,class J,都都要能转化为:新添加类和已有类之间的单独关系,即图二中的并不是情况报告。

一并,也都要能发现,我们 无法在类的继承价值形式中完全消除代码冗余,原困分析是多个类的情况报告下,其实是复杂。

我们 歌词 在使用哪此中有 继承价值形式的类的前一天,考虑图二的情况报告三,若B继承自A,没办法 实际上B也都要能当A用的,这很好理解,没办法 A统统我B的一次责。但若是,想让A代表B呢(实际上统统我B对象,统统我用的前一天当A用),为了完美处置你這個哪此的什么的问题,就要引入多态了。

三、多态

前面的分析可知,类之间的关系都都要能复杂为图二的情况报告。图二的情况报告三中,A当B用(实际上必须B对象)又分为以下并不是情况报告。第并不是情况报告特别别扭,但是 是需求决定的吧。

1.使用B中的A次责。直接使用A操作即可。

2.使用B中的非A次责。时要将A转化为B才可使用。

3.B覆盖定义A的公共接口但是 成员变量。当B作为A使用的前一天,A中的公共接口但是 成员变量是在非A中的,实现你這個机制的统统我多态。

C++中,基类定义虚函数,子类都要能重新实现它,以实现多态。令人奇怪的是,没办法 虚成员变量的概念,我其实但是 有以下多少原困分析:

1.没必要提供虚成员变量。父类的成员变量属于存储空间,是都要能直接用。不像函数,属于代码无法直接替换。

2.但是 编译器要实现你這個会复杂吧。

3.封装的概念是少暴露成员变量,只暴露接口。但是 ,好的类的设计是没办法 公共的成员变量的,也就不所处虚成员变量一说了。

但是 ,从完全性的深度1而言,应该提供虚成员变量的。

四、总结

      顶端的分析都要能看出,引入集合,统统我说明我试图用并不是简单的法律土办法来描述C++的封装、继承和多态。所有的源头,完全都是但是 在C++中引入了封装机制,也统统我传说中的面向对象。继承和多态完全都是随之而来的,顺着这条路径走下去,过多再发现C++顶端的变量的可视性(public, protected, private)等完全都是源自于顶端描述的集合之间的关系。而所有的哪此,统统我用来处置另另一一有多少哪此的什么的问题:模块化和代码共享。

本文出自2019-07-01出版的《电脑报》2019年第25期 A.新闻周刊 (网站编辑:zoey)

发表给力评论!看新闻,说两句。

匿名 ctrl+enter快捷提交

网站地图 | 版权声明 | 业务媒体媒体合作 | 感情是什么 链接 | 关于我们 | 招聘信息

报纸客服电话:2006677866 报纸客服信箱:pcw-advice@vip.sina.com 感情是什么 链接与媒体媒体合作:987349267(QQ) 广告与活动:6720009(QQ) 网站联系信箱:cpcw@cpcwi.com

Copyright © 2006-2011 电脑报官方网站 版权所有 渝ICP备20009040号