首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++虚函数缺省参数值

C++虚函数缺省参数值
EN

Stack Overflow用户
提问于 2014-01-21 13:29:18
回答 1查看 81关注 0票数 0

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

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

发布于 2014-01-21 13:36:03

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

代码语言:javascript
复制
Base *p;
p->show();

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

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

我还没试过,但我可以想象如果你说

代码语言:javascript
复制
Der *p = new Der();
p->show();

相反,你会得到12个输出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21249871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档