gpt4 book ai didi

c++ - 在基类数组中使用Subclass方法的默认值

转载 作者:行者123 更新时间:2023-12-03 06:57:38 24 4
gpt4 key购买 nike

cout << a[0]->function();有什么办法可以代替5?
目前,它采用基类的默认值并运行子类的方法。
但是我希望它运行子类的方法并采用子类的默认值。

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
}

最佳答案

您的代码是通过function()指针调用Basis*的,因此它将使用Basis定义的默认值,但Sub无法覆盖它。通过function()指针调用Sub*将使用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
}

关于c++ - 在基类数组中使用Subclass方法的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64689186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com