派生关系中的重名成员的处理(二义性问题)

来源:互联网 发布:软件时间校正 编辑:程序博客网 时间:2024/05/23 16:26

前面我们介绍了派生与继承关系,它们把不同的类联系在了一起,很容易就产生了一个重名成员的处理问题,我们称之为“派生关系中的二义性问题”。下面分几种情形来介绍:

1.基类与派生类间重名成员的处理

规则:重名成员不加类名限定默认是派生类成员;要访问基类重名成员则要采用类名限定的方法。

这里写图片描述

2.多重继承情况下基类重名成员的处理

规则:重名成员不加类名限定默认是派生类成员;要访问基类重名成员则要采用类名限定的方法。(同上)

这里写图片描述

3.多级混合继承(非虚拟继承)情况下“爷爷类”重名成员的处理

规则:重名成员不加类名限定默认是派生类成员;要访问基类重名成员则要采用类名限定的方法。(同上)

对最底层的派生类而言,如果父类和“爷爷类”都有同名成员,访问“爷爷类”会出现一些错误,详见多级继承中同名成员的访问。因此这里我们只讨论简单的情况,即“爷爷类”和子类有重名成员的情况。

这里写图片描述

4.多级混合继承(虚拟继承)情况下“爷爷类”只有一个,不会出现重名成员的情况,无需进行处理

方法:将“爷爷类”定义为虚基类,各派生类对象共享其同一个“爷爷”。这种继承称为共享继承。

class A{...};class B: virtual public A{...};class C: virtual public A{...};class D: public B, public C{...};

这里写图片描述

1 0
原创粉丝点击