C++【リロード、上書き、隠しの3つの違い】


リロードとオーバーライド:メンバー関数がリロードされるフィーチャー:(1)同じ範囲(同じクラス内);(2)関数名は同じである.(3)パラメータが異なる;(4)virtualキーワードの有無.オーバーライドは、(1)派生クラスとベースクラスにそれぞれ位置する異なる範囲(派生クラスとベースクラスにそれぞれ位置する);(2)関数名は同じである.(3)パラメータが同じである.(4)ベースクラス関数にはvirtualキーワードが必要である.「非表示」は、(1)派生クラスの関数がベースクラスの関数と同じ名前であるが、パラメータが異なる場合、(2)派生クラスの関数がベースクラスの関数と同じ名前である場合、同じ名前のベースクラスの関数をマスクすることです.この場合、virtualキーワードの有無にかかわらず、ベースクラスの関数は非表示になります(リロードと混同しないように注意).(2)派生クラスの関数がベースクラスの関数と同名でパラメータも同じであるが,ベースクラスの関数にvirtualがない場合
キーワード.このとき、ベースクラスの関数は非表示になります(オーバーライドと混同しないように注意).
例:
class A {
public:
  void foo (void) {
    this -> bar ();
  }
  virtual void bar (void) {
    cout << 'A' << endl;
  }
};
class B : public A {
private:
  void bar (void) {
    cout << 'B' << endl;
  }
};
int main (void) {
  B b;
  b.foo (); // B       bar     
}
class A {
public:
  A (void) {
    this -> bar ();
  }
  ~A (void) {
    this -> bar ();
  }
  virtual void bar (void) {
    cout << 'A' << endl;
  }
};
class B : public A {
private:
  void bar (void) {
    cout << 'B' << endl;
  }
};
int main (void) {
  B b; // 'A'   
  //        bar          ,    bar virtual   ,        
}