【发布时间】:2015-03-07 08:40:06
【问题描述】:
是否可以有一个抽象类,但强制实现类只具有抽象类中的公共方法?
我不关心私有方法如何工作,但我想强制类只有一个公共方法。
例如,假设我有以下抽象类:
class MyObjectTransform
{
public:
virtual ~MyObjectTransform()
{
}
virtual MyObject transform(MyObject input) = 0;
};
然后我想强制从MyObjectTransform 继承的所有对象只有一个(构造函数除外)公共方法transform。我不在乎继承类有什么私有方法。这可能吗?
更新: 这里的目标是强制开发人员仅通过单一方法公开功能。例如,考虑这种情况:
class ATransform
{
private:
MyObject A_Stuff(MyObject input);
public:
override MyObject transform(MyObject input)
{
return this->A_stuff(input);
}
};
class BTransform
{
public:
MyObject B_Stuff(MyObject input);
override MyObject transform(MyObject input)
{
return this->B_stuff(input);
}
};
这里的问题是开发者可以直接调用B_Stuff。我想防止这种情况发生。
【问题讨论】:
-
你为什么要这样做?
-
即使您可以做到这一点,也不会强迫开发人员仅通过该一种方法公开类的功能(这也是一个非常奇怪的目标)。
-
我不明白。如果我能做到这一点,如果子类只能有一个公共方法,开发人员怎么能以其他方式公开功能?
-
这个想法违背了整个继承/可重用的概念。我可以想象使用嵌套的私有类可以实现与您想要的类似的东西,但除非您明确说明您的动机,否则我们几乎无能为力。
-
@Alegnem:实际上,这个想法强化了这个概念。可以说 OP 直观地力求更严格地分离接口(公共函数)和实现(虚拟函数)。
标签: c++ c++11 inheritance abstract-class