在一个多派生类中,其基类继承自同一个基类,并且两个基类都定义了与其基类中的一个成员同名的成员,如何通过不同的路径访问该成员?
标题很长,这里有一个插图。
struct A{int i;};
struct B1:A{int i;};//non virtual
struct B2:A{int i;};//non vitual
struct C:B1,B2{};
现在,如何在B1
中访问A
中的i
,或者在C
对象中以A
B1
访问i
?
更清楚的是,c.i
当然是模棱两可的,其中c
是一个C
.但c.A::i
也是模棱两可的,但有两种可行的途径:
C -> B1 -> A
C -> B2 -> A
如何指定要使用的一个?
static_cast
是一种冗长但明确的方法:
C c;
static_cast<B1&>(c).i;
static_cast<B2&>(c).i;
static_cast<A&>(static_cast<B1&>(c)).i;
static_cast<A&>(static_cast<B2&>(c)).i;