【免费大发棋牌作弊器安卓版】了解C++的装、继承和多态

  • 时间:
  • 浏览:3
  • 来源:大发快三官网-大发快3官网

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

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

【电脑报在线】近期重新看过一下C++,一是感觉清晰了许多,二是觉得 若是换个高度看说说,会有不一样的体会,如果也容易记住C++中的许多特性。

近期重新看过一下C++,一是感觉清晰了许多,二是觉得 若是换个高度看说说,会有不一样的体会,如果也容易记住C++中的许多特性。本文就试图将集合论中的相关知识引入到C++的封装、继承、多态上,让许多人儿对它有个重新的认识。

从代码的高度而言,我认为计算机语言都会 可不免的出理 以下那我疑问:

 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.封装的概念是少暴露成员变量,只暴露接口。如果,好的类的设计是没人 公共的成员变量的,也就不发生虚成员变量一说了。

如果,从完全性的高度而言,应该提供虚成员变量的。

四、总结

      后面 的分析可不里能够看出,引入集合,也不说明我试图用一种生活简单的最好的法律法律依据来描述C++的封装、继承和多态。所有的源头,都会 原因在C++中引入了封装机制,也也不传说中的面向对象。继承和多态都会 随之而来的,顺着这条路径走下去,如果你发现C++后面 的变量的可视性(public, protected, private)等都会 源自于后面 描述的集合之间的关系。而所有的哪此,也不用来出理 那我疑问:模块化和代码共享。

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

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

匿名 ctrl+enter快捷提交

网站地图 | 版权声明 | 业务媒体协作 | 感情是什么 链接 | 关于许多人儿 | 招聘信息

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

Copyright © 60 6-2011 电脑报官方网站 版权所有 渝ICP备60 09040号