C++继承和派生

来源:互联网 发布:sm4算法介绍 编辑:程序博客网 时间:2024/06/10 04:04

        继承是面向对象程序设计的一个重要特性,是软件复用的一种形式,它允许在原有类的基础上创建新的类。新类可以从一个或多个原有类中继承函数和数据,并且可以重新定义或增加新的数据和函数,从而形成类的层次或等级。

       继承改变了过去传统的非面向对象程序设计中对不再适合要求的用户自定义数据类型进行改写甚至重写的方法,克服了传统程序设计方法对编写出来的程序无法重复使用而造成资源浪费的缺点。通过C++语言中的继承机制,可以扩充和完善旧的程序设计以适应新的需求,这样不仅可以节省程序开发的时间和资源,而且为未来的程序设计添加了新的资源。

       多态性也是面向对象程序设计的重要特性之一。它考虑类之间的层次关系以及自身内部特定成员函数之间的关系问题,解决功能和行为的再抽象问题。直观地讲,多态是指类中具有相似功能的不同函数使用同一个名称实现,从而可以利用相同的调用方式来调用这些具有不同功能的同名函数。


》基础概念

       #从基类继承了各种成员的关系称为继承。

       #类的继承是新的类从已有类哪里得到已有的特性。从已有类产生新类的过程就是类的派生。在继承过程中,原有类或已经存在的用来派生新类的类称为基类或父类,而由已经存在的类派生出新类则称为派生类或子类。

       #单继承:一个类只有一个直接基类。多继承:一个类同时有多个直接基类。

       #任何一个类都可以派生出一个新类,派生类也可以在派生出新类,因此,基类和派生类是相对而言的,一个基类可以是另一个基类的派生类,从而形成了复杂的继承结构,出现了类的层次。

       基类与派生类之间的关系:

               (1)基类是对派生类的抽象,派生类是对基类的具体化。基类抽取了它的派生类的公共特征,而派生类通过增加信息将抽象的基类变为某种有用的类型,派生类是基类定义的延续

               (2)派生类是基类的组合。多继承可以看做是多个单继承的简单组合。

               (3)公有派生类的对象可以作为基类的对象处理。这一点与类聚集(成员对象)是不同的,在类聚集(成员对象)中,一个类的对象只能拥有作为其成员的其他类的对象,但不能作为其他类对象而使用。


》派生类的定义与构成

       派生类的一般格式:

                 class<派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,<继承方式3><基类名3>....

                  {

                            <派生类新定义成员>

                  };

        其中,<基类名>是已有的类的名称,<派生类名>是继承原有类的特性而生成的新类的名称。单继承时,只需要定义一个基类;多继承时,需要同时定义多个基类。

        <继承方式>即派生类的访问控制方式,用于控制基类中声明的成员在多大的范围内能被派生类的用户访问。每一个继承方式都只对紧随其后的基类进行限定。

        继承方式包括3种:公有继承(public)、私有继承(private)、保护继承(protected)。如果不显式地给出继承方式,默认的类继承方式是私有继承。

        派生类新定义成员是指除了从基类继承来的所有成员之外,新增加的数据成员和成员函数。

        在一个派生类中,其成员由两部分构成:一部分是从基类继承得到的,另一部分是自己定义的新成员,所有这些成员任然分为公有、私有、保护三种访问属性。其中,从基类继承下来的全部成员构成派生类的基类部分,这部分的私有成员是派生类不能直接访问的,公有成员和保护成员则是派生类可以直接访问的,但是它们在派生来中的访问属性将随着派生类对基类的继承方式而改变。

       


》派生类对基类成员的访问

        派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部成员函数,但是这些成员在派生类中的访问属性在派生的过程中是可以调整的,继承方式控制了基类中具有不同访问属性的成员在派生类中的访问属性。

        基类的成员有公有(public)、私有(private)、保护(protected)三种刚访问属性,类的继承方式也有公有继承(public)、私有继承(private)、保护继承(protected)三种。不同的继承方式,导致具有不同访问属性的基类成员在派生类中具有新的访问属性。

        #基类中的私有成员在派生类中是隐藏的,只能在基类内部访问。

        #派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。此时派生类对基类中各成员的访问能力与继承方式无关,但继承方式将影响基类成员在派生类中的访问控制属性,当派生类从基类公有继承时:基类中公有成员和保护成员在派生类中仍然是公有成员和保护成员;当派生类从基类私有继承时,基类的公有成员保护成员在派生类中都改变为私有成员;派生类从基类保护继承时,基类的公有成员在派生类中改变为保护成员,基类的保护成员在派生类中仍然为保护成员。

        #保护成员同时具有公有成员和私有成员的特征,派生类对基类的保护成员的访问与对公有成员的访问相同,而派生类的实例(对象)对基类的保护成员的访问则与对私有成员的访问相同。因此为了便于派生类的访问,可以将基类的私有成员中需要提供给派生类访问的成员定义为保护成员。

0 0