继承

1.继承

  从一个已有的类的基础上创建一个新类,新类包含了已有类的所有成员,并且还增添了自己的成员。

  单重继承:生成的派生类只有一个基类

  多重继承:生成的派生类有两个或两个以上的基类

  (有的语言两种继承,如C++,有的语言只支持单重继承,如java,多重继承使用较少)

2.派生类

  定义:

 class <派生类名><继承方式> <基类名>

{

  <派生类新增成员说明>

}

3.基类成员在派生类中的访问权限

不论哪种继承方式,派生类对象只能访问公有成员

4.派生类的构造函数

B(int i,int j,int k):A(i),aa(j)

{

  b = k;

}

初始化列表中包括直接基类的构造函数、子对象、常数据成员

当派生类构造函数中包含基类中带参数的构造函数时,基类构造函数一定要显示的写在成员初始化列表中

当派生类构造函数中包含基类中默认构造函数时,该默认构造函数被隐含在派生类的构造函数中

派生类构造函数的执行顺序;

1)基类构造函数

2)子对象的构造函数

3)派生类的构造函数函数体

5.派生类的析构函数

5.派生类的析构函数

由于析构函数都是没有参数的,因此在派生类的析构函数中隐含着直接基类的析构函数

派生类析构函数的执行顺序

1)派生类析构函数的函数体

2)子对象所在类的析构函数

3)直接基类中的析构函数

析构函数执行顺序与构造函数执行顺序相反

如果存在多个子对象,析构子对象的顺序与定义子对象的顺序有关,先定义的后析构,后定义的先析构

6.子类型

定义:当一个类型至少包含了另一个类型的所有行为,则称该类型是另一个类型的子类型

在公有继下,派生类是基类的子类型

子类型关系不可逆

7.赋值兼容原则

当A是B的子类型,即A公有继承B时

1)A的对象可以赋值给B的对象

2)A的对象可以给B的对象引用赋值

3)A的对象地址值可以给B对象指针赋值

7.多重继承

  定义:一个派生类有两个或两个以上的基类

  class D:public A,public B,public C

  {

   ... 

  };

多个基类构造函数的执行顺序取决于定义派生类时规定的先后顺序,与派生类的成员初始化列表中顺序无关

8.多重继承的二义性

1)调用不同基类中的相同成员时可能出现二义性

  若两个相同的函数,一个出现在基类中,一个出现在派生类中,则派生类成员有支配基类成员的作用,故派生类成员有效

2)访问共同基类的成员时可能出现二义性

避免二义性的方法:类名限定

<类名>::<成员名>

原文地址:https://www.cnblogs.com/syyy/p/6106349.html