Lazybook 2015-08-23 04:41 采纳率: 0%
浏览 1877

虚函数的默认参数问题

#include
using namespace std;
class A
{
public:
virtual void f(int val=1){
cout<<"A->"< }
virtual void test()
{
f();
}
};
class B:public A
{
public:
virtual void f(int val=0)
{
cout"< }
};
int main()
{
A* pa;
B* pb =new B();
pa=pb;
pa->f();
pb->f();
cout<<"_______________"< pa->test();
pb->test();
}
第一次直接调用f()结果我能明白,但为什么通过B->test()调用的结果会是1而不是0,B的虚函数表不也包含test吗?调用的也是B的f啊?可结果??
结果:
图片说明

  • 写回答

4条回答 默认 最新

  • Robot-S 2015-08-23 04:44
    关注

    原文转自nwplei的博客
    当通过指针调用一个对象的方法时,如果该方法是虚函数,则实际调用的是该实例的方法。当缺省参数和虚函数一起出现的时候到底用哪个默认值呢?虚函数是动态绑定的,但是为了执行效率,缺省参数是静态绑定的。
    也就是 指针是哪种类型,就调用该类型对应的类中,该函数定义时的缺省值。#include
    using namespace std;
    class A
    {
    pu......
    答案就在这里:C++中 虚函数中的默认参数问题
    ----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!