C++之名字隱藏

在C++中,當你使用一個包含了重載方法的類時,並且當你繼承和重寫這個方法後,你必須重寫所有重載的方法。

例子:

 class FirstClass {
  public:
    virtual void MethodA (int);
    virtual void MethodA (int, int);
  };
  void FirstClass::MethodA (int i) { 
    std::cout << “ONE!!\n”; 
  }
  void FirstClass::MethodA (int i, int j) { 
    std::cout << “TWO!!\n”;
  }

這個簡單類有兩個方法(一個重載方法),如果你想重寫只有一個參數的版本,你可以這樣:
 
 class SecondClass : public FirstClass {
   public:
    void MethodA (int);
  };
  void SecondClass::MethodA (int i) { 
    std::cout << “THREE!!\n”;
  }
  void main () {
    SecondClass a;
    a.MethodA (1);
    a.MethodA (1, 1);
  }

然而,第二個調用會失敗,因爲兩個參數的方法MethodA 是不可見的。這個就是名字隱藏。


class father{
	void f(int a){cout <<"father\n";}
};

class child:public father{
	void f(int a,int b){cout <<"child\n";}
};
int main()
{	
       father f;
	child ch;
	ch.f(2);//編譯不通過
	ch.f(2,3);
	return 0;
}

同樣地父類中的函數被隱藏了



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章