c++ - 您能否强制从抽象基类继承的类仅具有在基例中定义的公共(public)方法?

标签 c++ c++11 inheritance abstract-class

是否可以有一个抽象类,但强制实现类只具有抽象类中的公共(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/

相关文章:

python - 封装 vs. 继承,帮助做出选择

scala - 如何在Clojure中模拟继承?

c++ - 混合不会消除 OpenCV 中的接缝

c++ - 绘制折线会产生像素化线

c++ - 为什么 std::forward 有两个签名?

java - 继承概念中的传递性

c++ - 迭代器运算符重载++ & -- 有一个参数 int 但未使用

c++ - 未调用 Qt Creator 的主要功能

c++ - 为什么从静态方法访问非静态方法是糟糕的设计

c++ - 在递归模板中通过引用传递模板函数