在 Base class 数组中使用 Subclass 方法的默认值

Use default value of Subclass method in an array of Base class

有什么方法可以让 cout << a[0]->function(); 改成 5?

目前,它采用基class和运行子方法的默认值class。

但是我想要运行subclass的方法,取subclass的默认值。

class Basis
{
public:
    virtual int function(int i = 1) { return 2; }
};

class Sub : public Basis
{
public:
    int function(int i = 5) override { return i; }
};

int main()
{
    Basis* a[2];
    a[0] = new Sub();
    cout << a[0]->function(); //gives 1
}

您的代码通过 Basis* 指针调用 function(),因此它将使用 Basis 定义的默认值,Sub 无法使用覆盖它。通过 Sub* 指针调用 function() 将使用 Sub 定义的默认值。

因此,鉴于您显示的代码,我能想到的最简单的方法就是使用函数重载,例如:

class Basis
{
public:
    virtual int function() { return function(1); }
    virtual int function(int i) { return 2; }
};

class Sub : public Basis
{
public:
    int function() override { return function(5); }
    int function(int i) override { return i; }
};

int main()
{
    Basis* a[2];
    a[0] = new Basis();
    a[1] = new Sub();
    cout << a[0]->function(); //gives 2
    cout << a[1]->function(); //gives 5
}