Virtual functions default parameters

前端 未结 2 461
离开以前
离开以前 2020-12-15 15:26

Could anybody explain where c++ compilers keep default values for parameters for virtual functions? I know it is a bad idea to change these parameters in child classes but w

2条回答
  •  无人及你
    2020-12-15 16:25

    It's a bad idea because they aren't kept anywhere.

    The default values that are used will be those defined in the static (compile-time) type. So if you were to change the default parameters in an override, but you called the function through a base class pointer or reference, the default values in the base would be used.

    #include 
    
    struct Base
    {
        virtual ~Base(){ }
        virtual void foo(int a=0) { std::cout << "base: " << a << std::endl; }
    };
    
    struct Derived : public Base
    {
        virtual ~Derived() { }
        virtual void foo(int a=1) { std::cout << "derived: " << a << std::endl; }
    };
    
    int main()
    {
        Base* derived = new Derived();
        derived->foo();    // prints "derived: 0"
        delete derived;
    }
    

提交回复
热议问题