⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 02.2.6 类的继承(2).txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
.类的继承及类中成员的访问特性
在类中还有另外一种成员访问权限修饰符:protected。下面是public,protected,private三种访问权限的比较:

n  public定义的成员可以在任何地方被访问。

n  protected定义的成员只能在该类及其子类中访问。

n  private定义的成员只能在该类自身中访问。

对于继承,也可以有public、protected或private这三种访问权限去继承基类中的成员,例如,例2-14所示代码中,fish类继承animal类,就是采用public的继承方式。如果在定义派生类时没有指定如何继承访问权限,则默认为private。如果派生类以private访问权限继承基类,则基类中的成员在派生类中都变成了private类型的访问权限。如果派生类以public访问权限继承基类,则基类中的成员在派生类中仍以原来的访问权限在派生类中出现。如果派生类以protected访问权限继承基类,则基类中的public和protected成员在派生类中都变成了protected类型的访问权限。

注意:基类中的private成员不能被派生类访问,因此,private成员不能被派生类所继承。

4.多重继承
如同该名字中所描述的,一个类可以从多个基类中派生。在派生类由多个基类派生的多重继承模式中,基类是用基类表语法成分来说明的,多重继承的语法与单一继承很类似,只需要在声明继承的多个类之间加上逗号来分隔,定义形式为:

class派生类名:访问权限 基类名称,访问权限 基类名称,访问权限 基类名称

{

       ……

};

例如B类是由类C和类D派生的,可按如下方式进行说明:

class B:public C, public D

{

       ……

}

基类的说明顺序一般没有重要的意义,除非在某些情况下要调用构造函数和析构函数时,在这样的情况下,会有一些影响。

n 由构造函数引起的初始化发生的顺序。如果你的代码依赖于B的D部分要在C部分之前初始化,则此说明顺序将很重要,你可以在继承表中把D类放到C类的前面。初始化是按基类表中的说明顺序进行初始化的。

n 激活析构函数以做清除工作的顺序。同样,当类的其他部分正在被清除时,如果某些特别部分要保留,则该顺序也很重要。析构函数的调用是按基类表说明顺序的反向进行调用的。

虽然,多重继承使程序编写更具有灵活性,并且更能真实地反映现实生活,但由此带来的麻烦也不小。我们看例2-15所示的程序(EX07.CPP):

例2-15

1. #include <iostream.h>

2. class B1

3. {

4. public:

5.     void output();

6. };

7. class B2

8. {

9. public:

10.     void output();

11.};

12.void B1::output()

13.{

14.     cout<<"call the class B1"<<endl;

15.}

16.void B2::output()

17.{

18.     cout<<"call the class B2"<<endl;

19.}

20.

21.class A:public B1,public B2

22.{

23.public:

24.     void show();

25.};

26.void A::show()

27.{

28.     cout<<"call the class A"<<endl;

29.}

30.void main()

31.{

32.     A a;

        a.output();         //该语句编译时会报错

33.     a.show();

34.}

例2-15的程序乍一看,好像没有错误,但是,编译时就会出错。原因何在?由第21行代码我们知道派生类A是从基类B1和B2多重继承而来的,而基类B1和B2各有一个output()函数,在第33行,当类A的对象a要使用a.output()时,编译器无法确定用户需要的到底是哪一个基类的output()函数,而产生'A::output' is ambiguous的错误信息,请读者注意。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -