【发布时间】:2015-05-14 23:09:22
【问题描述】:
假设我有一个接口层次结构:
class A
{
virtual void commonFunc() = 0;
};
class B1 : public A
{
virtual void b1SpecificFunc() = 0;
};
class B2 : public A
{
virtual void b2SpecificFunc() = 0;
};
接口 A 的存在只是为了避免重复 commonFunc() 函数。
现在,如果我想实现它以便拥有 2 个可实例化的类 ImplB1 和 ImplB2,我可以这样做:
class ImplA
{
virtual void commonFunc();
};
class ImplB1 : public ImplA
{
virtual void b1SpecificFunc();
};
class ImplB2 : public ImplA
{
virtual void b2SpecificFunc();
};
这样做的问题是它使 ImplA 可实例化,这是我不希望的。我只希望 ImplB1 和 ImplB2 是可实例化的,因为 ImplA 是抽象的东西,它的存在只是为了共同实现公共功能。
请问我该如何设计?谢谢。
【问题讨论】:
-
使 ImplA 的构造函数受保护和/或不从 ImplA 继承并使用组合来共享 commonFunc 的实现。
-
@KristianDuske:或者只是将
commonFunc排除在整个类层次结构之外。不知道更多细节很难说。 -
作曲+1。为什么不将构造函数设为私有但成为 Bs 的朋友并将其实例化为 Bs 中的成员?
标签: c++ class inheritance interface implementation