从两个不同类继承的非虚拟基类的访问成员

Access member of non-virtual base class inherited from two different classes

本文关键字:虚拟 基类 成员 访问 继承 同类 两个      更新时间:2023-10-16

在一个多派生类中,其基类继承自同一个基类,并且两个基类都定义了与其基类中的一个成员同名的成员,如何通过不同的路径访问该成员?

标题很长,这里有一个插图。

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对象中以AB1访问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;