c++第三篇

1、继承

    面向对象的特性---继承性

    定义:新类从已知类得到数据的过程我们称之为继承

          父类将数据给新的子类的过程称之为派生。

        新类:子类(派生类),已知类:父类(基类)

        父类:范围较大的类

        子类:父类的某个特殊类

        子类会继承父类所有的成员(数据成员、成员函数)。

    格式:

        class  子类的名称 : 继承方式 父类的名称

        {

            子类的新成员

            修改后的成员

        };

        继承方式:公有继承、私有继承、保护继承

    优点:

        可以实现代码重用,同一份代码只需写一次,在后续的类中还可以继续使用。

2、公有派生

    成员属性变化:

    公有派生后,基类中的公有成员在派生类仍为公有成员;

    基类中的私有成员仍为私有成员;

    基类中的保护成员仍为保护成员。

    派生类的对象对于基类成员的访问:

    派生类的对象可以访问从基类中继承的公有成员

    派生类的对象不可以访问从基类中继承的私有成员

    派生类的对象不可以访问从基类中继承的保护成员

    派生类中对于基类成员访问:

    派生类中可以访问从基类继承的公有成员

    派生类中不可以访问从基类继承的私有成员,(间接访问,声明友元)

    派生类中可以访问从基类继承的保护成员

2、私有派生

    成员属性变化:

    私有派生后,基类中的公有成员在派生类中为私有成员。

    基类中的私有成员在派生类中为私有成员。

    基类中的保护成员在派生类中为私有成员。

    私有派生后,基类中的所有成员在派生类中都为私有成员。

    派生类的对象对于基类成员的访问:

    派生类的对象无法直接访问基类的任何成员。

    派生类中对于基类成员访问:

    派生类中不可以直接访问从基类继承的私有成员。

    派生类中可以访问从基类继承的公有成员。

    派生类中可以访问从基类继承的保护成员。

3、保护派生

    成员属性变化:

    保护派生后,基类中私有成员在派生类中仍为私有成员

    基类中的公有成员在派生类中为保护成员。

    基类中的保护成员在派生类中为保护成员。

    派生类的对象对于基类成员的访问:

    派生类的对象无法访问基类的任何成员。

    派生类中对于基类成员访问:

    派生类中不可以直接访问从基类继承的私有成员。

    派生类中可以访问从基类继承的公有成员。

    派生类中可以访问从基类继承的保护成员。

补充:私有成员和保护成员的区别

    私有成员派生后在派生类中无法访问,而保护成员可以。

    使用最多是公有派生。私有派生和保护派生很少使用。

    私有派生:明智而审慎的使用私有继承。

4、多继承

    按照派生方式的不同分为了公有、私有、保护派生。

    按照基类的数量划分为单继承和多继承。   

    多继承:

        class 派生类:派生方式1 基类1,派生方式2 基类2 ... ...

        {

        };

    多继承后,派生类的对象大小为所有基类所占内存和派生类所有数据成员所占内存之和。

    多继承时要尽量避免容易出现歧义的数据或者函数成员,如果多个基类中继承的成员名称相同,可以通过类名::进行区分。

5、派生类的构造顺序

    1.在定义派生类的对象时,先构造派生类从基类中继承的数据(先调基类的构造函数),然后是派生类本身的数据(再调派生类本身的构造函数)

    2.涉及到多继承时,按照派生类中基类的派生顺序进行构造,析构正好相反

    3.当既有继承又有对象成员时,先构造基类的数据,然后构造对象成员,最后构造派生类本身。

6、构造派生类中基类的数据

    使用构造函数列表可以传参构造派生类中基类的数据。

    构造函数列表:

    1.const修饰的数据成员。

    2.对象成员的初始化。

    3.派生类中基类的数据可以使用构造函数列表完成赋值。

7、析构函数

    派生类的析构和基类的析构相互独立,互不干扰。

    派生类没有析构函数不会影响基类中析构函数的调用。

8、基类与派生类的指针关系

    定义派生类的对象时,内存中分为两部分,其中一部分为从基类继承的数据

    另一部分为派生类本身的成员。

    基类的数据在低地址,派生类的数据在高地址

    父类的指针可以指向子类的对象。

    父类的指针可以指向子类的对象,但是子类的指针不可以指向父类的对象。

发布了36 篇原创文章 · 获赞 7 · 访问量 7828

猜你喜欢

转载自blog.csdn.net/qq_33301482/article/details/84067089