您是否可以强制从抽象基类继承的类仅具有在基本情况下定义的公共方法?

Eri*_*ric 0 c++ inheritance abstract-class c++11

是否有可能有一个抽象类,但FORCE实现类只有抽象类中的公共方法?

我不关心私有方法是如何工作的,但我想强制这些类只有一个公共方法.

例如,假设我有以下抽象类:

class MyObjectTransform
{
    public:
    virtual ~MyObjectTransform()
    {
    }

    virtual MyObject transform(MyObject input) = 0;
};
Run Code Online (Sandbox Code Playgroud)

然后我想强制所有继承自的对象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);
    }
};
Run Code Online (Sandbox Code Playgroud)

这里的问题是开发人员可以B_Stuff直接调用.我想阻止这个.

chm*_*ike 5

不,你不能.派生类可以定义他们想要的任何公共成员函数.没有办法限制它.

更新:

如果您不希望用户访问它,请将B_Stuff声明为私有.如果您希望从BTransform派生的类也可以使用它,则将其声明为受保护.

class BTransform
{
private:
    MyObject B_Stuff(MyObject input);

Public:     
    override MyObject transform(MyObject input)
    {
        return this->B_stuff(input);
    }
};
Run Code Online (Sandbox Code Playgroud)

但是你不能强迫用C++语言将B_Stuff声明为私有或受保护.必须将其定义为策略.