本文主要是介绍派生关系中的重名成员的处理(二义性问题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前面我们介绍了派生与继承关系,它们把不同的类联系在了一起,很容易就产生了一个重名成员的处理问题,我们称之为“派生关系中的二义性问题”。下面分几种情形来介绍:
1.基类与派生类间重名成员的处理
规则:重名成员不加类名限定默认是派生类成员;要访问基类重名成员则要采用类名限定的方法。
2.多重继承情况下基类重名成员的处理
规则:重名成员不加类名限定默认是派生类成员;要访问基类重名成员则要采用类名限定的方法。(同上)
3.多级混合继承(非虚拟继承)情况下“爷爷类”重名成员的处理
规则:重名成员不加类名限定默认是派生类成员;要访问基类重名成员则要采用类名限定的方法。(同上)
对最底层的派生类而言,如果父类和“爷爷类”都有同名成员,访问“爷爷类”会出现一些错误,详见多级继承中同名成员的访问。因此这里我们只讨论简单的情况,即“爷爷类”和子类有重名成员的情况。
4.多级混合继承(虚拟继承)情况下“爷爷类”只有一个,不会出现重名成员的情况,无需进行处理
方法:将“爷爷类”定义为虚基类,各派生类对象共享其同一个“爷爷”。这种继承称为共享继承。
class A{...};
class B: virtual public A{...};
class C: virtual public A{...};
class D: public B, public C{...};
这篇关于派生关系中的重名成员的处理(二义性问题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!