首页 > 编程语言 >c++中的类 - 类继承

c++中的类 - 类继承

时间:2022-12-04 22:33:26浏览次数:40  
标签:函数 BC 继承 成员 派生类 c++ 基类 构造函数

1,派生类继承了基类的所有成员函数和数据成员(构造函数、析构函数和操作符重载函数外)。

2,当不指明继承方式时,默认为私有继承。

3,基类的私有成员仅在基类中可见,在派生类中是不可见的。基类的私有成员可以由派生类继承,但在派生类中不可见。尽管在派生类中不能直接访问基类的私有成员,但可以通过间接的方式进行访问(设置公有成员访问函数)。

4,改变访问限制:通过使用 using 声明可以改变成员在派生类中的访问限制。

5,名字隐藏:如果派生类添加了一个数据成员,而该成员与基类中的某个数据成员同名,新的数据成员就隐藏了继承而来的同名成员,同理,如果派生类添加了与基类的某个成员函数同名的函数,则该函数就隐藏了基类中的同名函数。

6,保护成员:在没有继承的情况下,保护成员和私有成员类似(类的对象不能直接访问保护成员)。保护成员在派生类中是可见的,仅在类层次结构中可见。一般避免将数据成员设计成保护类型,设计一个用来进行存取访问的保护成员函数,通常将这种类型的成员函数称为访问函数。

7,派生类不能访问一个基类对象的保护成员,这是因为基类对象属于基类,不属于派生类。

8,继承机制下的构造函数:当创建一个派生类对象时,基类的构造函数被自动调用,用来对派生类对象中的基类部分进行初始化,并完成其它一些事务。如果派生类定义了自己的构造函数,则由该构造函数负责对象中“派生类添加部分”的初始化工作。

9,有时候基类的构造函数的功能对派生类而言已经足够,这时候派生类不必自行设计构造函数,否则派生类必须定义自己的构造函数。可以在派生类的构造函数中调用其基类的构造函数(前提是基类拥有构造函数)。

10,在一个层次很深的类层次结构中,创建一个派生类对象将导致派生链中的所有类的构造函数被逐一调用,这是一个多米诺骨牌效应。构造函数的函数体将按照自顶向下(依照继承层次)的次序依次执行。

11,派生类构造函数的规则:如果基类拥有构造函数但没有默认构造函数,那么派生类的构造函数必须显式地调用基类的某个构造函数。一般建议为每个基类都设计一个默认构造函数。

总结:(a)若 DC 有构造函数而 BC 没有,当创建 DC 类的对象时,DC 的相应构造函数被自动调用。

   (b)若 DC 没有构造函数而 BC 有,则 BC 必须拥有默认构造函数,只有这样,当创建 DC 类的对象时,才会自动执行BC 的默认构造函数。

   (c)若 DC 有构造函数,而且 BC 有默认构造函数,则创建 DC 类的对象时,BC 的默认构造函数会自动执行,除非当前被调用的派生类构造函数在其初始化段中显式地调用了 BC 的非默认构造函数。

   (d)若 DC 和 BC 都有构造函数,但 BC 没有默认构造函数,则 DC 的每个默认构造函数必须在其初始化段中显式地调用 BC 的某个构造函数。只有这样,当创建 DC 类的对象时,BC 的构造函数才能获得执行机会。

12,继承机制下的析构函数:析构函数按照派生类到基类的次序执行,因此,析构函数的执行次序和构造函数的执行次序时相反的。由于每个类至多只有一个析构函数,因此对析构函数的调用不会产生二义性,这样在析构函数中不必显式地调用其他析构函数。

13,多继承:在多继承中,一个派生类可以有多个基类,构造的层次结构是图。派生类是其所有基类的组合体。

14,继承和访问规则:使用多继承机制,将增加命名冲突出现的可能性,表现形式有两种:(a)派生类和某个基类之间发生命名冲突;(b)基类与基类之间发生命名冲突。(在单继承中称为名字隐藏),通过使用域解析符来解决。

15,虚基类:解决派生类从同一个间接基类继承了多次(获取了相同的数据成员 x 多次),用虚基类来解决。将 DC1 和 DC2 说明为 z 的虚基类,就是要求 DC1 和 DC2 仅将同名数据成员的一份拷贝发放到 z 当中,而不管 DC1 和 DC2 从共同的祖先获得了多少个同名的数据成员。

16,保护继承:(a)基类的所有成员在派生类中是保护成员。

        (b)基类中的保护成员在派生类中是保护成员。

        (c) 基类中的所有私有成员仅在基类中可见。

17,私有继承:

        (a)基类的所有成员在派生类中是私有的。

        (b)基类的保护成员在派生类中是私有的。

        (c) 基类的私有成员仅在基类中可见。

 

转载 https://www.cnblogs.com/ssezhangpeng/p/10462824.html

 

标签:函数,BC,继承,成员,派生类,c++,基类,构造函数
From: https://www.cnblogs.com/kuailest/p/16951027.html

相关文章

  • VSCode配置C-C++环境
    转载自:【教程】VScode中配置C语言/C++运行环境_哔哩哔哩_bilibili下载编辑器VScode官网:https://code.visualstudio.com/安装VScode(建议附加任务全部勾选)下载......
  • 1.C++入门基础(上)
    C++关键字C++关键字全集(参考C++Primer):asmautobad_castbad_typeidboolbreakcasecatchcharclassconstconst_castcontinuedefaultdelete......
  • 3.C++和C的混合编译
    简介C++语言的创建初衷是"abetterC",但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++......
  • 2.C++入门基础(下)
    内联函数C++中函数的使用我们已经比较清楚了,与C语言中函数的使用大多相同,主要是增加了重载的特性,对C语言的函数的一些缺陷做了一些补充。那么对于一些比较简单却又经常使......
  • 7.C++拷贝构造函数
    拷贝构造函数我们经常会用一个变量去初始化一个同类型的变量,那么对于自定义的类型也应该有类似的操作,那么创建对象时如何使用一个已经存在的对象去创建另一个与之相同的对......
  • 6.C++构造函数
    类的6个默认成员函数如果我们写了一个类,这个类我们只写了成员变量没有定义成员函数,那么这个类中就没有函数了吗?并不是的,在我们定义类时即使我们没有写任何成员函数,编译器......
  • 5.C++类和对象(上)
    面向过程和面向对象初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事拆分成不同的对象......
  • 11.C++日期类的实现
    日期类的实现在前面学过默认成员函数后,我们就可以写一个简单的日期类了。如何写呢?我们可以先分析分析。日期类的成员变量都是int类型,那么构造函数是要显式定义的,成员变......
  • 10.C++类和对象(下)
    再谈构造函数之前讲过构造函数的一些特性,再在这里补充下。构造函数体赋值classDate{public: Date(intyear,intmonth,intday) { _year=year; _month=m......
  • 9.C++运算符重载
    运算符重载本文包括了对C++类的6个默认成员函数中的赋值运算符重载和取地址和const对象取地址操作符的重载。运算符是程序中最最常见的操作,例如对于内置类型的赋值我们直......