凤7

导航

 

继承:在一个已经存在的类的基础上建立一个新的类,这个新类从已有的的类哪里获得已有的特性

派生类:继承了已有类的全部成员数据和成员函数

继承又有单继承和多重继承的方式

关系:派生类是基类的具体化,基类是派生类的抽象

继承方式:class 派生类名:继承方式 基类名    //如果不写继承方式则默认为private

    {

      派生类中新增加的成员;

    };

派生类的构成:

  1. 从基类接收成员:接收基类的全部数据成员(不包括构造函数和析构函数)不可选择接收的数据
  2. 调整从基类接收的成员:在派生类中可以实现同名覆盖(参数表)
  3. 声明派生类新增加的成员

派生类中成员的访问属性

  1. 公共继承:基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有,不可访问。
  2. 私有继承:基类的公用成员和保护成员在派生类中成了派生类的私有成员,其私有成员仍为基类私有。
  3. 受保护的继承:基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有。保护成员的意思是,不能被外界引用,但可以被派生类的成员引用。

  私有成员在派生类中都成为不可访问的属性,派生类中的一切成员均无法访问它们。

多级派生时的访问属性:直接派生,间接派生

派生类的构造函数和析构函数:

  1. 构造函数的主要作用就是对数据成员的初始化。
  2. 构造和析构函数是不能被继承的需要在执行派生类的构造函数时,调用基类的构造函数

派生类构造函数的一般形式:派生类构造函数名(总参数表):基类构造函数名(参数表)

              {

                派生类中新增加的数据成员初始化;

              }

          如: Teacher_Cadre(string nam, int a, char s, string add, string p,string tit, string po,float w):Teacher(nam,a,s,add,p,tit),Cadre(nam, a, s, add, p, po)
              {
                wages = w;
              }

有子对象的派生类的构造函数:对象中的对象

            Student s1;      //Student是已声明的类名,s1是Student类的对象

              派生类构造函数名(总参数表):基类构造函数名(参数表),子对象名(参数表)

              {

                派生类中新增加的数据成员初始化;

              }

多重继承派生类的构造函数:调用基类的构造函数的顺序是按照声明派生类时的基类出现的顺序

虚基类:在继承间接共同基类时只保留一份成员,在指定继承方式时声明

class A

{...};

class B:virtual public A

{...};

class C:virtual public A

{...};

初始化问题

      class A

      {

        A(int i){};

        ...};

      class B:virtual public A

      {

        B(int i):A(n){};

       ...};

      class C:virtual public A

      {

        B(int i):A(n){};

       ...};

posted on 2019-11-29 16:41  凤7  阅读(233)  评论(0编辑  收藏  举报