C++多继承时如何从有同名成员的两个父类分别选择要继承的成员
C++多继承同名成员的指定继承方案
你要的能力可以通过using成员声明实现,实现方案如下:
修正后的类C代码
class C : public A, public B // 注意原代码中B是默认private继承,按需调整继承权限 { public: // 指名无限定访问x时优先使用A的x using A::x; // 指名无限定访问y时优先使用B的y using B::y; C() {} };
说明
- 完成上述修改后,直接访问
C类实例.x会获取到A类定义的x(值为0),直接访问C类实例.y会获取到B类定义的y(值为1),完全匹配你的需求。 using声明仅指定无限定名时的默认查找优先级,不会删除父类的同名成员,你依然可以通过全限定名访问其他父类的同名成员,例如c.B::x可以访问B类定义的x,c.A::y可以访问A类定义的y。- 你之前测试时拿到的x、y均为0属于非标准行为:按照C++标准,未指定同名成员来源时直接访问会触发编译歧义报错,你拿到0大概率是编译器非标准扩展、或者你测试代码中主动加了
A::限定导致。
内容的提问来源于stack exchange,提问作者kubo
相关产品推荐
相关产品推荐

