首页 > 后端开发 > C++ > 虚函数中的默认参数会继承到派生类吗?

虚函数中的默认参数会继承到派生类吗?

Barbara Streisand
发布: 2024-11-26 14:15:11
原创
189 人浏览过

Do Default Parameters in Virtual Functions Inherit to Derived Classes?

虚函数可以有默认参数吗?

问题:

声明虚函数时基类中带有默认参数,派生类是否继承这些参数默认值?

答案:

不,虚函数中的默认值不会被派生类继承。使用的默认值由调用函数时对象的静态类型决定。

说明:

C 标准(C 03 和 C 11)指定虚函数调用使用在函数定义中声明的默认参数,该参数由用于调用该函数的指针或引用的静态类型决定。

示例:

考虑以下代码:

struct Base {
  virtual void f(int a = 7);
};
struct Der : public Base {
  void f(int a);
};
登录后复制

通过指向 Base 对象的指针调用 f() 时,默认值 7 将被使用:

Base* pb = new Base;
pb->f(); // uses the default 7
登录后复制

但是,当通过指针调用 f() 时Der 对象,将不会使用派生类的默认值:

Der* pd = new Der;
pd->f(); // error: no default argument for this function
登录后复制

实践和编译器注意事项:

虽然 C 标准规定了行为,但某些编译器可能会以不同的方式实现虚函数默认参数。但是,建议遵循标准的指南,以确保跨编译器的行为一致。

代码演示:

以下代码演示了默认参数行为:

struct Base { virtual string Speak(int n = 42); };
struct Der : public Base { string Speak(int n = 84); };

int main()
{
    Base b1;
    Der d1;

    Base *pb1 = &b1, *pb2 = &d1;
    Der *pd1 = &d1;
    cout << pb1->Speak() << "\n" // Base 42
         << pb2->Speak() << "\n" // Der 42
         << pd1->Speak() << "\n" // Der 84
         << endl;
}
登录后复制

输出:

Base 42
Der 42
Der 84
登录后复制

以上是虚函数中的默认参数会继承到派生类吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板