non-virtual base class 的访问成员继承自两个不同的 classes
Access member of non-virtual base class inherited from two different classes
在一个多重派生的 class 中,其基础 class 继承自相同的基础 class 并且两个基础 class 都定义了一个与一个同名的成员在他们的基地class,如何通过不同的路径访问成员?
标题有点长,上图吧
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
或 [=20 中的 B1
中的 A
中的 i
=] object?
更清楚一点,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;
在一个多重派生的 class 中,其基础 class 继承自相同的基础 class 并且两个基础 class 都定义了一个与一个同名的成员在他们的基地class,如何通过不同的路径访问成员?
标题有点长,上图吧
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
或 [=20 中的 B1
中的 A
中的 i
=] object?
更清楚一点,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;