编程语言
首页 > 编程语言> > C++默认参数静态绑定

C++默认参数静态绑定

作者:互联网

先来看这样一段代码

class Base
{
public:
    virtual void print(int a = 1) const
    {
        std::cout << "Base " << a << "\n";
    }
};

class Derived : public Base
{
public:
    virtual void print(int a = 2) const override
    {
        std::cout << "Derived " << a << "\n";
    }
};

请问:若按如下方式调用,会输出什么?

Base *p = new Derived();
p->print();

答案:输出 Derived 1(而非 Base 1Derived 2)。

原因:

因此,重写基类函数时不要重新定义函数的默认参数,以避免出现上文中的坑。

参考资料:

  1. Effective C++ item 37: Never Redefine a Function's Inherited Default Parameter Value
  2. 默认实参 - cppreference.com

标签:函数,绑定,Derived,默认,Base,C++,print,实参
来源: https://www.cnblogs.com/zhb2000/p/cpp-default-arguments.html