不同作用域聲明的標識符的可見性原則:
如果存在兩個或多個具有包含關系的作用域,外層聲明了一個標識符,而內層沒有再次聲明同名標識符,那麼外層標識符在內層依然可見,如果在內層聲明了同名標識符,則外層標識符在內層不可見,這時稱內層標識符隱藏了外層同名標識符,這種現象稱為隱藏規則。
在類的派生層次結構中,基類的成員和派生類新增的成員都具有類作用域。二者的作用范圍不同,是相互包含的兩個層,派生類在內層。這時,如果派生類聲明了一個和某個基類成員同名的新成員,派生的新成員就隱藏了外層同名成員,直接使用成員名只能訪問到派生類的成員。如果派生類中聲明了與基類同名的新函數,即使函數的參數表不同,從基類繼承的同名函數的所有重載形式也都被隱藏。如果要訪問被隱藏的成員,就需要使用類作用域分辨符和基類名來限定。
作用域分辨符,就是"::",它可以用來限定要訪問的成員所在的類的名稱。一般的使用形式是:
類名::成員名
類名::成員名(參數表)
關於同名隱藏的驗證:
代碼1:
由結果可知已經不能直接從B的對象中直接用函數名訪問print2()了。
將b.print2(); 改為: b.A::print2();