从两个不同类继承的非虚拟基类的访问成员
Access member of non-virtual base class inherited from two different classes
在一个多派生类中,其基类继承自同一个基类,并且两个基类都定义了与其基类中的一个成员同名的成员,如何通过不同的路径访问该成员?
标题很长,这里有一个插图。
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;
相关文章:
- 子类地址等于虚拟基类地址?
- 虚拟基类函数中派生类的大小
- 虚拟基类初始化
- 虚拟基类在内部如何工作?编译器如何解析对基方法的调用?
- 返回纯虚拟基类的向量的元素
- std::is_base_of和虚拟基类
- 如何在子类中重写时调用私有虚拟基类实现
- 从两个不同类继承的非虚拟基类的访问成员
- 为什么必须由最派生的类构建虚拟基类
- 虚拟基类的派生类列表
- boost::bind 无法绑定到纯虚拟基类中定义的非静态函数模板成员类型
- 虚拟基类和继承
- (为什么)纯虚拟派生类中是否需要虚拟基类构造函数调用?
- 在派生类中使用虚拟基类的受保护的CTOR
- 私有非虚拟基类函数被称为派生类中的函数
- 虚拟基类的创建顺序
- 使用虚拟基类C++向下转换
- 为什么在派生最多的类的初始值设定项列表中显式调用虚拟基类构造函数的规则,而较老的祖先已经拥有它?
- 虚拟与纯虚拟基类函数并从DLL导出
- 在多级继承中派生的虚拟基类会发生什么