【问题标题】:C++ virtual function default argument value [duplicate]C ++虚函数默认参数值[重复]
【发布时间】:2014-02-10 13:25:50
【问题描述】:

下面是我的测试代码,我想它会输出“Der:12”,但结果是“Der:11”,谁能告诉我为什么输出这个,默认的参数存储在哪里?

#include <stdio.h>
class Base{
public:
    virtual void show(int i = 11) 
    {   
        printf("Base:%d\n", i); 
    }   
};

class Der : public Base{
public:
    virtual void show(int i = 12) 
    {   
        printf("Der:%d\n", i); 
    }   
};

int main()
{
   Base *p = new Der();
   p->show();

   return 0;
}

【问题讨论】:

标签: c++ class default-value


【解决方案1】:

嗯,我不确定用不同的默认参数覆盖一个虚函数是否真的有效,这当然是不明智的。但另一方面,编译器正在做正确的事情,即使它与您的期望相反。

Base *p;
p->show();

这里发生的是编译器在Base 中查找不带参数的函数。没有,但它找到了一个参数的函数并调用show(int),默认参数为11。

但是这个函数是虚函数,所以因为p的动态类型是Der,所以实际调用的是Der::show(int)——但至关重要的是,仍然使用Base的默认参数11,但是默认参数是静态查找的,不使用运行时调度。

我没试过,但如果你说的话我会想象

Der *p = new Der();
p->show();

你会得到 12 个输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多