C++知识要点整理11:继承与派生(1)

来源:互联网 发布:windows远程桌面快捷键 编辑:程序博客网 时间:2024/06/02 06:14

1.继承

(1)公用继承
    基类的公有成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。
(2)私有继承
    基类的公有成员和保护成员在派生类中成了私有成员。其私有成员仍为基类私有。
(3)受保护的继承

   基类的公有成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有(保护成员的意思是:不能被外界引用,但可以      被派生类的成员引用)。

在基类的访问属性         继承方式                                在派生类中的访问属性private(私有)public(公用)不可访问private(私有)private(私有)不可访问private(私有)protected(保护)不可访问public(公有)public(公用)public(公用)public(公有)private(私有)private(私有)public(公有)protected(保护)protected(保护)protected(保护)public(公用)protected(保护)protected(保护)private(私有)private(私有)protected(保护)protected(保护)protected(保护)

2.派生类的构造函数

(1)简单的派生类的构造函数
  派生类构造函数一般形式为:
  派生类构造函数名(总参数表):基类构造函数名(参数表)
       {派生类中新增数据成员初始化语句}

例如:
      Student1(int n,string nam,char s,int a,string sd):Student(n,nam,s)
      {
         age =a;
         addr=ad;
        }
     其中Student1公用继承自Student,Student1中有age和addr两个私有数据成员,Student中有num,name,sex,三个私有数据成员。我们可以看到基类构造函数参数表列只有参数名而没有参数类型,因为在这里不是定义基类构造函数,而是调用基类构造函数,因此这些参数是实参而不是形参。
(2)有子对象的派生类的构造函数
     类中的数据成员中还可以包含类对象,如可以在声明一个Student1类时包含这样的数据成员:Student s1;这时,s1就是类对象的内嵌对象,称为子对象。
    此时定义派生类构造函数的一般形式为:
    派生类构造函数名(总参数表):基类构造函数名(参数表),子对象名(参数表)
      {派生类中新增数据成员初始化语句}

    执行顺序是:首先调用基类构造函数,对基类数据成员初始化;然后调用子对象构造函数,对子对象数据成员初始化;最后执行派生类构造函数本身,对派生类数据成员初始化。
(3)多层派生时的构造函数
     不要列出每一层派生类的构造函数,只需写出其上一层派生类(即它的直接基类)的构造函数即可。

3.使用派生类构造函数时的两种特殊形式:

(1)当不需要对派生类新增的成员进行任何初始操作时,派生类构造函数的函数体可以为空,即构造函数是空函数。例如:
       Student1(int n,string nam,int n1,string nam1):Student(n,nam),monitor(n1,nam1){}
(2)如果在基类中没有定义构造函数,或定义了没有参数的构造函数,那么,在定义派生类构造函数时可以不写基类构造函数。因    为此时派生类构造函数没有向基类构造函数传递参数的任务。在调用派生类构造函数时,系统会自动首先调用基类的默认构造函      数。

4.派生类的析构函数

    调用顺序:先执行派生类自己的析构函数,对派生类新增加的成员进行清理,然后调用子对象的析构函数,对子对象进行清理,最后调用基类的析构函数,对基类进行清理。