C多重继承-相同的方法名称-我可以以某种方式删除其中一个吗?

新手上路,请多包涵

我在 C++11 中有这个结构

struct A {
   int idA;
   void setId(int i) { idA = i;}
   int getId() { return idA;}

   virtual void foo() = 0;
};

struct B {
   int idB;
   void setId(int i) { idB = i;}
   int getId() { return idB;}

   virtual void foo2() = 0;
};

struct AB : public A, public B
{
   void foo() override {}
   void foo2() override {}
};

现在主要我可以这样称呼它:

 AB * ab = new AB();
ab->B::setId(10);

但我真的不喜欢它。

还有其他解决方案吗?方法 setId/getId 来自 struct AAB 中不需要。我只是做了继承,因为我需要 foo() 和其他来自 A 的东西,但所有其他方法都是独一无二的。

原文由 Martin Perry 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 236
1 个回答

既然你说你不需要 A 这些方法的版本,你可以写

struct AB : public A, public B
{
    void foo() override {}
    void foo2() override {}

    using B::setId;
    using B::getId;
};

这会将 B 的这些方法的实现放入 AB 的命名空间中,并使调用它们明确。

原文由 Ben Steffan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题