C++程序设计之继承

 时间:2024-10-29 03:40:47

1、继承的含义: 先找出大部分事物共性的部分,形成基本的类使它具有一些基本的数据成员和一些基本的成员函数,以实现基本的功能。 然后根据需要再在这个类的基础上派生出新的类来,这个新类首先一定具有基础类的所有的数据成员和函数成员,也就是具有这个基础类的所有功能,同时它还应有一些自已特有的成员,实现一些区别于基础类的功能。

C++程序设计之继承

2、在C++中引入继承机制的原因是为了描述由简单到复杂的各个不同层次的事物。使各个类不会因为过于庞大和复杂而显得臃肿和不够灵活,也不会因为过于简单而显的功能不强。

C++程序设计之继承

3、派生类说明也是类说明,不过需要指明它所继承的基类,同时在类的成员中可增加一类保护成员。

C++程序设计之继承

4、基类说明表:列出所给类的基类派生方式 基类名派生方式有3种:public表示公有派生,protected 表示保护派生,private表示私有派生。

C++程序设计之继承

5、C++语言中继承有两种,单继承和多继承

C++程序设计之继承
C++程序设计之继承

6、基类成员在各自派生类中的存取权限见下表

C++程序设计之继承

7、继承与派生关系,应该注意以下5点:1、一个类可以派生出多个派生类2、一个类可有一个或多个基类3、派生类又可有派生类,称为多级继承4、继承关系不可循环。5、基类的友元关系和基类的构造函数和析构函数都不能被派生类所继承。

8、构造派生类对象时,要对其基类数据成员、新增数据成员进行初始化。派生类的构造函数的一般格式如下。派生类名(参数表):成员初始化表{ 构造函数体}成员初始化表如下:基类名1(基类参数表1),……,基类名n(基类参数表n),对象成员名1(对象成员参数表1),……,对象成员名m(对象成员参数表m)

9、创建派生类对象的步骤为:

C++程序设计之继承

10、释放派生类对象的步骤与创建的步骤正好相反:

C++程序设计之继承

11、派生类构造函数的参数不仅要为自己的数据成员提供初始化数据,还要为基类,以及基类的基类提供初始化数据;2、由成员初始化表指明哪些参数用于本类,哪些参数用于基类;3、在多重继承的情况下,构造函数的执行顺序是先基类(多个基类则按基类说明表处的自左至右顺序,而并不按成员初始化表处的顺序),再对象成员,最后是自身。

12、派生类的对象必然是一个基类对象,通过派生类对象,也就可以直接调用(或存取)其基类的公有或保护成员函数(或公有及保护数据成员)。派生类对象.基类的公有或保护成员可以做如下的赋值操作基类对象 = 派生类对象;注意:反向的赋值是不允许的

13、基类的友元不继承。1、基类的友元不一定是派生类的友元;2、基类的成员是某类的友元,则其作为派生类继承的成员仍是某类的友元。

14、如果基类中被派生类继承的成员是静态成员,则其静态属性也随静态成员被继承过来。1、这些成员通常用“类名::成员名”方式引用或调用;2、这些成员无论有多少个对象被创建,都只有一个拷贝。

15、派生类对象间的赋值操作依据下面的原则:1、如果派生类有自己的赋值运算符的重载定义,即按该重载函数处理;2、派生类未定义自己的赋值操作,而基类定义了赋值操作,则系统自动定义派生类赋值操作,其中基类成员的赋值按基类的赋值操作进行;3、二者都未定义专门的赋值操作,系统自动定义缺省赋值操作(按位进行拷贝)。

16、单一继承(只有一个基类)时,若基类与派生类的成员重名,则按如下规定进行处理:1、不加类名限定时默认为是处理派生类成员。2、要访问基类重名成员时,则要通过类名限定。

C++程序设计之继承

17、多重继承(具有多个基类)情况下二基类间成员重名时,要按如下方式进行处理:1、不加类名限定时默认为是处理派生类成员。2、要访问基类重名成员时,则要通过类名限定。

C++程序设计之继承

18、多级混合继承情况比较复杂,CD以CB1、CB2为基类, CB1、CB2以CA为基类1、CD的对象CDobj 中首先应包含CB1的对象和CB2 的对象来作为CDobj的组成部分;2、CB1的对象则首先应以一个CA的对象作为其组成部分;3、CB2的对象亦首先应以一个CA的对象作为其组成部分。

C++程序设计之继承

19、多级混合继承导致在CD的对象中有两个CA的对象,出现二义性问题。解决这种二义性的方式有两种:•使用类名限制CDobj.CB1::aCDobj.CB2::a

20、•使用虚基类虚基类是在出现继承关系时才被定义,只在派生类和基类间有效。说明方式为:在派生类B,C,…… 定义的基类表中,关于基类A 的说明中,增加关键字“virtual”。注:使用虚基类时,类B和类C共享1个类A的拷贝

C++程序设计之继承

21、 若虚基类的构造函数具有参数的话,则对其任何一个直接或间接派生类的构造函数来说,它们的成员初始化列表中都必须包含有对该虚基类构造函数的直接调用。 在派生类构造函数的成员初始化列表中,若有虚基类构造函数调用的话,则对它们的调用将优先于非虚基类构造函数。

22、 如果虚基类的构造函数没有参数、或者根本就没提供显式的虚基类构造函数的话(表示用该虚基类的无参构造函数或系统默认构造函数来完成有关的初始化工作),对其任何一个直接或间接派生类的构造函数来说,它们的成员初始化列表中都不再需要包含有对该虚基类构造函数的直接调用。

  • 怎么解决受限的双端队列问题
  • PyCharm如何设置项目的新建位置#校园分享#
  • c语言如何定义long long类型
  • stm32_LED闪烁
  • win11如何检测其它显示器
  • 热门搜索
    从小学先锋长大做先锋手抄报 感恩的心手抄报 感恩老师手抄报 厉行节约反对浪费手抄报 爱国卫生手抄报 我的梦想手抄报 清明节手抄报。 天安城门手抄报 感恩教育手抄报 化学手抄报