在 C++ 中虚拟基类的两个实现之间共享方法
Posted
技术标签:
【中文标题】在 C++ 中虚拟基类的两个实现之间共享方法【英文标题】:Sharing methods between two implementations of a virtual base class in C++ 【发布时间】:2009-11-24 05:38:30 【问题描述】:我有一个虚拟基类和两个实现各种方法的类。对于其中一种方法,这两个类具有相同的功能。有没有我可以在两个类之间共享实现以消除冗余代码?除了虚拟基类之外,我尝试将第一个类作为第二个类的父类,但出现了一堆错误。
编辑 - 感谢大家的回复。我应该提到的一件事是我无法修改虚拟基类,因此仅将代码添加到基类是行不通的。
【问题讨论】:
虚拟基类是什么意思,即抽象类或虚拟继承自其他类? 一切都用 virtual methodname() = 0; 声明 @blcArmadillo:它是一个abstract 基类,而不是虚拟基类。虚拟基类在 C++ 中的含义完全不同 【参考方案1】:假设A
是基类,B
和C
是继承自基类的类。在B
和C
之间共享逻辑的方法称为SomeMethod
。无论您的用例如何,以下其中一项都应该可以解决问题:
B::SomeMethod
和C::SomeMethod
的逻辑并将其复制并粘贴到A::SomeMethod
创建一个类D
,它提供SomeMethod
的共享版本,并让B
和C
派生自D
,这将派生自A
创建一个类SomeMethodImpl
,它只提供你想要的实现,然后B::SomeMethod
和C::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】:我相信虚拟基类是指具有纯虚拟函数(抽象类)的基类,而不是虚拟派生自基类。如果是这种情况,您可以将通用实现放在这个基类中,以便它可用于所有派生类。
【讨论】:
以上是关于在 C++ 中虚拟基类的两个实现之间共享方法的主要内容,如果未能解决你的问题,请参考以下文章