派生类中的函数与基类中的完全相同,但默认参数不同

C. *_*air 3 c++ virtual inheritance

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

用某种代码示例编辑我认为可能有效但违反前面提到的帖子中所说的内容,对我来说似乎不太整洁:

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 */
    }
};
Run Code Online (Sandbox Code Playgroud)

Pet*_*ter 5

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

 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
 };
Run Code Online (Sandbox Code Playgroud)

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

 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
 };
Run Code Online (Sandbox Code Playgroud)

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