为什么子类覆盖虚函数不能更改父类的默认函数参数?

时间:2015-03-03 07:26:03

标签: c++

我从一本书中读到了一些代码,如下:

#include<iostream>

using namespace std;

class Father
{
public:
    virtual void test(int value=520)
    {
        cout<<"father:"<<value<<endl;
    }
};

class Son :public Father
{
public:
    virtual void test(int value=250)
    {
        cout<<"son:"<<value<<endl;
    }
};

int main()
{
    Son* son =new Son;
    son->test();
    Father* fson= son;
    fson->test();
}

节目输出:

  

son250

     

son520

书中说,虚函数的默认参数在编译时确定。

我的问题是: 虚函数的默认参数为什么不在运行时决定?就像虚函数本身一样。

1 个答案:

答案 0 :(得分:3)

C和C ++的制造商并不想让问题复杂化。实现在编译时解析的默认参数很简单,而在运行时则不那么简单。但是,您可以并且应该使用一种解决方法。而不是使用默认参数引入另一个没有参数的虚函数。

class Father
{
public:
    virtual void test(int value)
    {
        cout << "father:" << value << endl;
    }


    virtual void test()
    {
        test(520);
    }
};

class Son : public Father
{
public:
    virtual void test(int value)
    {
        cout << "son:" << value << endl;
    }

    virtual void test()
    {
        test(250);
    }
};