是否可以有一个抽象类,但强制实现类只具有抽象类中的公共(public)方法?
我不关心私有(private)方法如何工作,但我想强制类只有一个公共(public)方法。
例如,假设我有以下抽象类:
class MyObjectTransform
{
public:
virtual ~MyObjectTransform()
{
}
virtual MyObject transform(MyObject input) = 0;
};
然后我想强制所有从 MyObjectTransform
继承的对象只有一个(构造函数除外)公共(public)方法 transform
。我不关心继承类有什么私有(private)方法。这可能吗?
更新: 这里的目标是强制开发人员仅通过单一方法公开功能。例如,考虑这种情况:
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
。我想阻止这种情况。
最佳答案
不,你不能。派生类可以定义它们想要的任何公共(public)成员函数。没有办法对此施加限制。
更新:
如果您不希望用户访问它,请将 B_Stuff 声明为私有(private)。如果您希望从 BTransform 派生的类也可以使用它,请将其声明为 protected 。
class BTransform
{
private:
MyObject B_Stuff(MyObject input);
Public:
override MyObject transform(MyObject input)
{
return this->B_stuff(input);
}
};
但是您不能强制使用 C++ 语言将 B_Stuff 声明为私有(private)或 protected 。它必须定义为一项政策。
关于c++ - 您能否强制从抽象基类继承的类仅具有在基例中定义的公共(public)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28912992/