zoukankan      html  css  js  c++  java
  • 缺省参数值的继承问题

      在C++的继承中,缺省参数会出现在两种函数:virtual和non-virtual函数。

      先讨论non-virtual函数继承。如果在子类内再次定义父类的non-virtual函数,这时会覆盖父类的同名函数,就是我们所谓的重写override。也就是一个全新的函数,和父类完全没有关系,使用的缺省参数当然是子类的。

      再看virtual函数继承。假设有如下的继承关系:

    class Shape
    {
    public:
        virtual void draw(int nColor = 255) const = 0;
    };
    
    class Rect : public Shape
    {
    public:
        void draw(int nColor = 120) const
        {
            cout<<nColor<<endl;
        }
    };
    
    int main()
    {
        Shape* ps = new Rect;
        ps->draw();
        return 0;
    }

      这种情况下draw函数输出的是255还是120?答案是255。

      如果把main函数中的代码改一下:

    1 int main()
    2 {
    3     Rect* ps = new Rect;
    4     ps->draw();
    5     return 0;
    6 }

      那这种情况下draw函数输出的是255还是120?答案是120。

      这是为什么呢?原因其实是由C++的动态绑定和静态绑定机制决定的。我们首先要知道virtual是动态绑定,而缺省参数值却是静态绑定的。也就是说函数使用哪个缺省参数在编译器就已经决定好了。就好比说上面的第一种情况,ps的静态类型是Shape*,也就是ps在调用draw函数时使用的是Shape::draw函数的缺省参数255。同理第二种情况使用的是Rect::draw的缺省参数120。

  • 相关阅读:
    JDE函数--获取当前登录人的描述
    JDE报表开发笔记(R5537011 收货校验统计表)
    JDE函数--GetUDC(B函数)
    JDE隐藏Constant等(Hide Object)
    Oracle “dba_tables”介绍
    word2013设置页面边框
    makefile--#的不正确使用
    CICS定时
    程序的命名
    UE上传到FTP,会多出些字符
  • 原文地址:https://www.cnblogs.com/wuhaowinner/p/default_parameter.html
Copyright © 2011-2022 走看看