gpt4 book ai didi

c++ - 派生类中的功能与基类中的功能完全相同,但默认参数不同

转载 作者:行者123 更新时间:2023-12-01 14:13:48 25 4
gpt4 key购买 nike

在此阅读 post您可以使用其他默认参数覆盖虚函数,但这并不明智。我的情况与那里的问题略有不同。我的基类中的函数和派生类中的函数应该完全相同,只是默认参数不同。我应该如何实现这一目标?

使用我认为可能有效但违反前面提到的帖子中所说的内容并且对我来说似乎不是很整洁的代码示例进行编辑:

class base {
public:
//not sure about the virtual here
virtual void func(bool something = true) { /*Do some stuff*/};
};

class derived : public base {
public:
void func(bool something = false) override
{
base::func(something); /*Doesn't seem like the way to go for me */
}
};

最佳答案

一种选择是显式重载函数,而不是依赖默认参数

 class Base
{
public:
virtual void func() {func(2);} // call func(int) with one default
void func(int value);
};

class Derived: public Base
{
public:
using Base::func; // so the function which accepts an argument is
// not hidden from users the class
virtual void func() {func(42);} // call Base::func(int) with different value
};

根据需要,默认值可能更容易成为构造函数设置的成员。

 class Base
{
public:
Base() : default_value(2) {};
void func() {func(default_value);}
void func(int value);

protected:
Base(int defaulted) : default_value(defaulted) {};

private:
int default_value;
};

class Derived: public Base
{
public:
Derived() : Base(42) {}; // set different default value in the constructor
};

根据您的需要(并且要求只是为函数提供不同的默认值,但其他方面相同),您可能希望考虑将函数保留为非虚拟函数。

关于c++ - 派生类中的功能与基类中的功能完全相同,但默认参数不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61405823/

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