zoukankan      html  css  js  c++  java
  • C++虚函数默认实参的注意事项

    我们都知道当成员函数是虚函数的时候,函数调用取决于调用函数的对象的类型而不是指针或者应用的类型。这就是C++中的多态。

    那么一个虚函数的实参的缺省值是什么呢?例如如下代码:

    #include <iostream>
    #include <string>
    using namespace std;
    
    class A
    {
    public:
        virtual void func(int number = 10)
        {
            cout << "A::func() " << number << endl;
        }
    };
    
    class B : public A
    {
    public:
        virtual void func(int number = 20)
        {
            cout << "B::func() " << number << endl;
        }
    };
    
    int main(int argc, char **argv)
    {
        B b;
        A &a = b;
    
        b.func();
        b.func(99);
        a.func();
        a.func(99);
        return 0;
    }

    运行结果是:

    B::func() 20
    B::func() 99
    B::func() 10
    B::func() 99

    由上面的运行结果我们可以得到,即使动态调用了子类的 func() 函数,那么函数的缺省值仍然还是基类中定义的缺省值 10;

    由此可见,虚函数的缺省值取决于调用函数的指针或者引用的类型而不是对象本身的类型。

  • 相关阅读:
    数组(array)
    亲戚(relative)
    [ZJOI2016]小星星
    P4782 【模板】2-SAT 问题
    CF1065F Up and Down the Tree
    CF1065C Make It Equal
    CF1060F Shrinking Tree
    CF1060E Sergey and Subway(点分治)
    CF1060D Social Circles
    CF1060C Maximum Subrectangle
  • 原文地址:https://www.cnblogs.com/uangyy/p/4617542.html
Copyright © 2011-2022 走看看