Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 应该接受不同输入参数的纯虚拟函数-应该如何实现?_C++_Polymorphism_Virtual - Fatal编程技术网

C++ 应该接受不同输入参数的纯虚拟函数-应该如何实现?

C++ 应该接受不同输入参数的纯虚拟函数-应该如何实现?,c++,polymorphism,virtual,C++,Polymorphism,Virtual,假设我有一个名为Component的基类 class Component { public: virtual void init() = 0; }; 该基类需要派生类来定义init函数。但是,此init函数声明强制函数不接受任何输入参数。这不是我想要的 我正在寻找一种方法来强制执行init函数,但允许派生类在接受的参数数量上有所不同 根据组件类型,派生类应接受不同数量的输入 < C++ > 如何实现这一点? 例子 class DerivedComponent1 : Componen

假设我有一个名为Component的基类

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

您应该考虑使用Switter语句而不是虚拟限定符来解决这个问题。只需选择一个函数定义,然后选择一个默认值或零即可绕过对参数的考虑。当您试图以这种方式编写类所做的事情时,很容易混淆,因此必须对函数进行完整的注释和单元测试


编辑说明:您可以考虑每个新派生实例中的虚拟限定符,但这不是您所问的问题的解决方案。构造函数或析构函数方法必须具有非常具体的效果;否则,对类的效果进行质量测试是不切实际的,因此,当您需要依赖于一个大小适合的结构时,uctor,只有在编码过程中非常小心,才能真正达到这种效果]

这是三种不同的函数。在任何情况下,如果有一个指针/引用一个组件,init的调用方会知道多少参数要通过。抱歉,这不能在C++中完成。C++没有这样的工作。子类只能重写具有相同签名的虚拟方法。这是基本的。要使用VA。riadic函数。它应该适用于纯虚拟。你想如何调用这些初始化函数?这可能会给我们一个实现这一点的线索。