子類父類 成員同名

子類和父類中同名成員的問題

如果創建父類對象來訪問父類中的這個成員,那無話可說。

如果創建子類對象,此時創建的子類對象會繼承父類中可繼承的公有部分,也就是說這個子類對象既包含了子類新增的內容,又包含了父類繼承的內容。這時問題便來了?繼承的那個同名的成員和子類中聲明的那個成員分別如何訪問呢。

答:子類中的成員在子類函數中可以直接用名稱訪問,如果他是public的,還可以用子類的對象來訪問。那麼如何訪問父類中的該成員?答:“子類對象名.父類名::成員變量名”  , 當然這個變量必然是public的,即允許在外部對他進行訪問。

那麼,如果父類中這個同名的成員是protected怎麼辦?

答:顯然,在類外部不能訪問類內部非public的成員。但是既然是protected,那麼子類便繼承了這個成員,雖然表面上是重名的,但在子類中確實存在這兩個同名的成員,所以在子類內部的成員函數中必然能訪問這兩個同名變量。訪問子類本身成員的方法前面已經說了是直接訪問即可,訪問父類繼承的成員的方法就是:“父類名::成員名”。


子類父類成員函數名相同

  1. 子類和父類返回值參數相同,函數名相同,有virtual關鍵字,則由對象的類型決定調用哪個函數。
  2. 子類和父類只要函數名相同,沒有virtual關鍵字,則子類的對象沒有辦法調用到父類的同名函數,父類的同名函數被隱藏了,也可以強制調用父類的同名函數class::funtion_name。
  3. 子類和父類參數不同,函數名相同,有virtual關鍵字,則不存在多態性,子類的對象沒有辦法調用到父類的同名函數,父類的同名函數被隱藏了,也可以強制調用父類的同名函數class::funtion_name。
  4. 子類和父類返回值不同,參數相同,函數名相同,有virtual關鍵字,則編譯出錯error C2555編譯器不允許函數名參數相同返回值不同的函數重載

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