具有默认参数意外行为的虚函数

问题描述

我最近试图了解虚函数是如何工作的,所以我决定尝试运行以下代码

#include <iostream>


class Base {
public:
    virtual void f(int i = 10) const {
        std::cout << i << std::endl;
    }
    virtual ~Base() = default;
};

class Derived : public Base {
public:
    virtual void f(int i = 20) const override{
        std::cout << i << std::endl;
    }
};

int main() {
    Derived d;
    Base* pb = &d;
    pb->f();   // prints 10
    d.f();     // prints 20
    return 0;
}

结果让我很惊讶,我原以为这两个函数都应该在控制台上打印 20,但不幸的是,这并没有发生。

结果如下

10
20

有人能解释一下那里发生了什么吗?

谢谢你。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)