C++中名字隱藏是什麼?

讓我們通過一個例子來講解C++中的名字隱藏。在C++中,如果一個類裏有一個重載的方法, 你用另一個類去繼承它並重寫(覆蓋)那個方法。你必須重寫所有的重載方法, 否則未被重寫的方法會因爲名字相同而被隱藏,從而使它在派生類中不可見。

請看例子:

上面的類中有兩個方法(重載的方法),如果你想在派生類中重寫一個參數的函數, 你可以這麼做:

 

上面的main函數中,第2個MethodA在編譯時會報錯,提示沒有與之匹配的函數。 這是因爲兩個參數的MethodA在派生類中是不可見的,這就是名字隱藏。

名字隱藏與虛函數無關。所以不管基類中那兩個函數是不是虛函數, 在這裏都會發生名字隱藏。解決方法有兩個。第一個是將2個參數的MethodA換一個名字, 那麼它在派生類中就可見了。但我們既然重載了MethodA,說明它們只是參數不同, 而實際上應該是在做相同或是相似的事的。所以換掉名字並不是個好辦法。因此, 我們一般採用第二種方法,在派生類中重寫所有的重載函數。


原文地址:http://www.cricode.com/757.html

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