首页  >  文章  >  后端开发  >  默认参数在 C 虚拟函数中的行为如何?

默认参数在 C 虚拟函数中的行为如何?

Barbara Streisand
Barbara Streisand原创
2024-11-10 10:12:02271浏览

How do Default Arguments Behave in Virtual Functions in C  ?

虚函数默认参数行为

在 C 中,虚函数提供了一种多态性机制。但是,虚拟函数中默认参数的行为可能会令人困惑。

考虑以下代码:

class B {
public:
    B() {}
    virtual void print(int data = 10) {
        cout << endl << "B--data=" << data;
    }
};

class D : public B {
public:
    D() {}
    void print(int data = 20) {
        cout << endl << "D--data=" << data;
    }
};

int main() {
    B *bp = new D();
    bp->print();
    return 0;
}

运行此代码时,您可能期望输出为:

D--data=20

然而,实际输出是:

D--data=10

解释:

这种意外行为的原因在于 C 标准(8.3 .6.10),它规定虚拟函数调用使用虚拟函数声明中的默认参数,该默认参数由表示对象的指针或引用的静态类型确定。在这种情况下,由于您通过类型 B(即 bp)的指针调用 print(),因此使用 B::print() 的默认参数,即使派生类 D 中的重写函数具有不同的默认值

因此,当通过基类指针或引用调用虚函数时,将应用基类函数的默认参数,而不是重写的函数。理解这种行为很重要,可以避免在使用虚函数和默认参数时出现任何混淆或意外结果。

以上是默认参数在 C 虚拟函数中的行为如何?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn