【问题标题】:Sharing methods between two implementations of a virtual base class in C++在 C++ 中虚拟基类的两个实现之间共享方法
【发布时间】:2009-11-24 05:38:30
【问题描述】:

我有一个虚拟基类和两个实现各种方法的类。对于其中一种方法,这两个类具有相同的功能。有没有我可以在两个类之间共享实现以消除冗余代码?除了虚拟基类之外,我尝试将第一个类作为第二个类的父类,但出现了一堆错误。

编辑 - 感谢大家的回复。我应该提到的一件事是我无法修改虚拟基类,因此仅将代码添加到基类是行不通的。

【问题讨论】:

  • 虚拟基类是什么意思,即抽象类或虚拟继承自其他类?
  • 一切都用 virtual methodname() = 0; 声明
  • @blcArmadillo:它是一个abstract 基类,而不是虚拟基类。虚拟基类在 C++ 中的含义完全不同

标签: c++ inheritance class


【解决方案1】:

假设A是基类,BC是继承自基类的类。在BC 之间共享逻辑的方法称为SomeMethod。无论您的用例如何,以下其中一项都应该可以解决问题:

  • 获取B::SomeMethodC::SomeMethod 的逻辑并将其复制并粘贴到A::SomeMethod
  • 创建一个类D,它提供SomeMethod 的共享版本,并让BC 派生自D,这将派生自A
  • 创建一个类SomeMethodImpl,它只提供你想要的实现,然后B::SomeMethodC::SomeMethod的实现只会将方法调用委托给SomeMethodImpl::SomeMethod的私有实例

【讨论】:

    【解决方案2】:

    如果您想将基类保持为纯虚拟,请创建另一个继承自该类并实现该功能的类,然后让您的其他两个类继承自该类:

    class Base { public: virtual void TheFunction(); /* blah blah other virtual functions */ };
    class OneFunctionImplemented : public Base { public: virtual void TheFunction() { DoSomething(); } };
    class ChildClass1 : public OneFunctionImplemented { };
    class ChildClass2 : public OneFunctionImplemented { };
    

    【讨论】:

      【解决方案3】:

      将共享功能放在基类中。其他两个类都可以从那里访问它。

      【讨论】:

        【解决方案4】:

        我相信虚拟基类是指具有纯虚拟函数(抽象类)的基类,而不是虚拟派生自基类。如果是这种情况,您可以将通用实现放在这个基类中,以便它可用于所有派生类。

        【讨论】:

          猜你喜欢
          • 2015-01-31
          • 1970-01-01
          • 1970-01-01
          • 2015-07-04
          • 1970-01-01
          • 1970-01-01
          • 2015-09-01
          • 1970-01-01
          • 2016-04-18
          相关资源
          最近更新 更多