首页 > 解决方案 > 应该接受不同输入参数的纯虚函数 - 这应该如何实现?

问题描述

假设我有一个名为“组件”的基类

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);
};

标签: c++polymorphismvirtual

解决方案


您应该考虑使用switch语句而不是virtual限定符来解决这个问题。只需选择一个函数定义并选择默认值或零即可绕过对参数的考虑。当您尝试以这种方式对类所做的事情进行编码时,很容易感到困惑,因此您的函数必须完全注释并进行单元测试。

[澄清编辑:您可以virtual在每个新的派生实例中考虑限定符,但这不是您所询问问题的解决方案。一种ConstructorDestructor方法必须具有非常具体的效果;否则,对一个类的效果进行质量测试是不切实际的,所以当你需要依赖a时one-size-fits-all constructor,你真的只有在编码过程中非常小心才能达到那种效果]


推荐阅读