zoukankan      html  css  js  c++  java
  • 避免遮掩继承而来的名称

    public:
      virtual void mf1() = 0;
      virtual void mf1(int);

      virtual void mf2();

      void mf3();
      void mf3(double);

      ...

    };

    class Derived: public Base {
    public:
      virtual void mf1();
      void mf3();
      void mf4();
      ...
    };

    Derived d;
    int x;

    d.mf1();                   // fine, calls Derived::mf1
    d.mf1(x);                  // error! Derived::mf1 hides Base::mf1
    d.mf2();                   // fine, calls Base::mf2
    d.mf3();                   // fine, calls Derived::mf3
    d.mf3(x);                  // error! Derived::mf3 hides Base::mf3

    不管是不是virtual,也不管函数参数是否不同,父类的函数名称都被掩盖了

    解决办法:
    class Derived: public Base {
    public:
      using Base::mf1;       // make all things in Base named mf1 and mf3
      using Base::mf3;       // visible (and public) in Derived's scope
      virtual void mf1();
      void mf3();
      void mf4();
      ...
    };

    Derived d;
    int x;
    ...
    d.mf1();                 // still fine, still calls Derived::mf1
    d.mf1(x);                // now okay, calls Base::mf1
    d.mf2();                 // still fine, still calls Base::mf2
    d.mf3();                 // fine, calls Derived::mf3
    d.mf3(x);                // now okay, calls Base::mf3

     如果你继承base class并加上重载函数,而你又希望重定义或覆写其中一部分,那么你必须为那些原本会被遮掩的每个名称引入一个using声明,否则某些你希望继承的名称会被遮掩

  • 相关阅读:
    240. Search a 2D Matrix II
    436. Find Right Interval
    378. Kth Smallest Element in a Sorted Matrix
    278. First Bad Version
    374. Guess Number Higher or Lower
    207. Course Schedule
    Java enum的用法详解
    Android中RelativeLayout各个属性 android:layout_alignParentLeft=”true”找不到有时候
    android:layout_gravity和android:gravity的区别
    Android 相对布局 扩展
  • 原文地址:https://www.cnblogs.com/secbook/p/2655476.html
Copyright © 2011-2022 走看看