谁能解释 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/