虚基类解决二义性问题在派生类中对基类成员的访问应该是惟一的。但是,在多继承情况下,可能造成对基类中某个成员的访问出现了不惟一的情况,这时就称对基类成员的访问产生了二义性。 产生二义性问题主要有两种情况,其类结构如图11-2所示: 解决二义性问题主要要三种方法: (1) 通过作用域运算符(::)明确指出访问的是哪一个基类中的成员。使用作用域运算符进行限定的一般格式是: <对象 展开
虚基类解决二义性问题在派生类中对基类成员的访问应该是惟一的。但是,在多继承情况下,可能造成对基类中某个成员的访问出现了不惟一的情况,这时就称对基类成员的访问产生了二义性。 产生二义性问题主要有两种情况,其类结构如图11-2所示: 解决二义性问题主要要三种方法: (1) 通过作用域运算符(::)明确指出访问的是哪一个基类中的成员。使用作用域运算符进行限定的一般格式是: <对象名>.<基类名>::<成员名>//数据成员 <对象名>.<基类名>::<成员名>(<参数表>) //成员函数 (2) 在类中定义同名成员。定义同名成员可以解决二义性问题的主要原因是支配规则在起作用。支配规则如下: 类X中的成员N支配类Y中同名的成员N是指类X以类Y为它的一个基类。如果一个名字支配另一个名字,则二者之间不存在二义性,当使用该成员时,使用支配者中的成员。 (3) 虚基类。 在解决二义性问题时要注意: (1) 一个类不能从同一个类中直接继承一次以上。 (2) 二义性检查在访问控制权限或类型检查之前进行,访问控制权限不同或类型不同不能解决二义性问题。 参考文献: 收起