c++ - 应该接受不同输入参数的纯虚函数 - 这应该如何实现?
问题描述
假设我有一个名为“组件”的基类
class Component
{
public:
virtual void init() = 0;
};
这个基类需要派生类来定义一个“init”函数。但是,此 init 函数声明强制该函数不接受输入参数。这不是我想要的。
我正在寻找一种方法来强制执行“init”函数,但允许派生类改变它接受的参数数量。
根据组件类型,派生类应接受不同数量的输入。
这将如何在 C++ 中实现?
例子
class DerivedComponent1 : Component
{
void init(int arg1);
};
class DerivedComponent2 : Component
{
void init(int arg1, int arg2);
};
解决方案
您应该考虑使用switch
语句而不是virtual
限定符来解决这个问题。只需选择一个函数定义并选择默认值或零即可绕过对参数的考虑。当您尝试以这种方式对类所做的事情进行编码时,很容易感到困惑,因此您的函数必须完全注释并进行单元测试。
[澄清编辑:您可以virtual
在每个新的派生实例中考虑限定符,但这不是您所询问问题的解决方案。一种Constructor
或Destructor
方法必须具有非常具体的效果;否则,对一个类的效果进行质量测试是不切实际的,所以当你需要依赖a时one-size-fits-all constructor
,你真的只有在编码过程中非常小心才能达到那种效果]
推荐阅读
- python - 为什么我的 Python 函数没有返回任何值?
- android - 如何在 SQLite for Android 中使用关键字 AUTOINCREMENT
- oracle - 无法创建池的初始连接 - 带有 Oracle DB 的 Spring Boot
- .htaccess - 根据浏览器语言和 utm 参数重定向 .htaccess
- xml - 如何根据“sec/@disp-level”值在“sec/title”元素下生成格式化数字序列
- logstash - Kibana - 结合两列在 Kibana 中创建一个新列
- nearprotocol - 任何人都可以更改帐户和总供应量吗?
- unity3d - Unity 2D/3D 在路径中的检查点上拖动精灵
- flutter - Flutter,如何从另一个类中处理对话框 TextEditingController
- powershell - 附加到文件的多个进程导致覆盖