带默认参数的虚函数
虚函数通常用于面向对象编程中的多态性。它们可以有默认参数值,这就出现了派生类是否继承这些默认值还是指定自己的默认值的问题。
派生类继承默认值吗?
根据C 标准,派生类不会从基类继承虚函数的默认值。
其中使用默认值?
虚函数调用中使用的默认值取决于被调用对象的静态类型。如果通过基类对象或引用调用虚函数,则将使用基类的默认值。但是,如果您通过派生类对象或引用进行调用,则将使用派生类的默认值。
编译器行为和建议实践
不同的编译器可能处理虚函数默认值的方式不同。但是,C 标准规定默认值不可继承,应在派生类中显式指定。
示例
考虑以下示例:
struct Base { virtual void f(int a = 7); }; struct Derived : public Base { void f(int a); };
在这个例子中,Derived 类中的 f 函数没有从基类继承默认值 7。通过派生类对象调用 f 时,调用应显式指定参数,如下所示:
Derived d; d.f(10); // Call `Derived::f(int a)` with a = 10
结论
虽然虚函数可以有默认参数,这些默认值不会被派生类继承。使用的默认值取决于被调用对象的静态类型。遵循 C 标准建议并在派生类中显式指定默认值被认为是最佳实践。
以上是派生类是否继承虚函数中的默认参数?的详细内容。更多信息请关注PHP中文网其他相关文章!