c++ - 虚函数默认参数

标签 c++

谁能解释 c++ 编译器在哪里保留虚函数参数的默认值?我知道在子类中更改这些参数是个坏主意,但为什么呢? 谢谢。

最佳答案

这是个坏主意,因为它们没有放在任何地方。

使用的默认值将是那些在静态(编译时)类型中定义的值。因此,如果您要更改覆盖中的默认参数,但您通过基类指针或引用调用函数,则将使用基类中的默认值。

#include <iostream>

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;
}

关于c++ - 虚函数默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18105523/

相关文章:

c++ - 将任意数量的迭代器对折叠到一个新的迭代器中。元编程以获得良好的语法?

c++ - C++ 中的 set 和 unordered_set 有什么区别?

c++ - cvRetrieveFrame 崩溃

c# - 在这种情况下,为什么 .NET 比 C++ 快?

c++ - 跟进: Boost serialized custom C++ object passed over ZeroMQ pull socket

c++ - 我可以从这个矩阵算法中得到旋转吗

c++ - 如何将对象的指针写入文件?

c++ - 复制构造函数 - 编译器错误 C2040 和 C2440

c++ - 二维 vector C++ 中的多于两列排序

c++ - 如果文件是可执行的,为什么我需要安装一些依赖项?