gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:48:18 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com