向虚方法添加默认参数

时间:2013-11-06 08:40:02

标签: c++

在下面的代码中,我想在不修改子类的情况下向'func'方法添加新的默认参数'z'。我得到错误C2259:'CTest':无法实例化抽象类错误。

无论如何都可以在不修改所有子类的情况下执行此操作吗?

class ITest
{
public:
    virtual void func(int x, int y, char c, int z = 1) = 0;
};

class CTest : public ITest
{
public:
    void func(int x, int y, char c)
    {
    }
};

3 个答案:

答案 0 :(得分:3)

您想要的不是直接可能的。现有类不知道z参数,因此无法使用它。如果您想提供一些新的子类,其客户端将知道z并且能够使用它,您可以这样做:

class ITest
{
public:
    virtual void func(int x, int y, char c) = 0;
    virtual void func(int x, int y, char c, int z)
    { func(x, y, c); }
};

这样,旧类和以前一样工作,调用3参数版本的客户也是如此。您还可以使用z和使用4参数版本的新客户端选择新的子类。

答案 1 :(得分:1)

您必须修改子类中的func()方法,以使其与父类中的方法匹配。无论哪种方式,您都会收到此错误:cannot instantiate abstract class error

答案 2 :(得分:-1)

您可以添加私人数据并将其初始化为1

class ITest
{
public:
    ITest(): z(1) {} 
    virtual void func(int x, int y, char c) = 0;
private:
    int z;
};