c 子类对象 访问父类对象受保护成员_C++日志(三十四)子类同名成员与作用域分辨符...
在繼承中,如果子類新增成員和父類成員的名稱相同,那么就需要辨別訪問的是子類成員還是父類成員。
1、什么是作用域分辨符?
C++中,作用域分辨符由“::”表示,其作用是限定所訪問成員所在的類。作用域標識符的使用語法如下:
類名2、什么是隱藏規則?
對于具有包含關系的作用域:
- 如果內層和外層聲明了同名標識符,那么外層標識符在內層中不可見,即隱藏規則;
- 如果內層沒有聲明和外層同名標識符,那么外層標識符在內層可見;
根據同名隱藏規則,子類聲明和父類同名的成員時,將導致父類的成員被隱藏(子類聲明的同名函數和父類同名函數參數表不同也被隱藏,即重載形式也被隱藏)。此時,則需要使用作用域標識符進行限定成員所屬的父類。
3、子類使用作用域標識符訪問父類成員
考慮一般的情況,即子類繼承自父類,父類又繼承自父類,即多級繼承。此時,如果子類對象想要訪問任一級父類的同名成員,則需要使用作用域標識符。
下面的例子中,類Z繼承自類Y,類Y繼承自類X,并且X、Y、Z三個類都含有同名函數成員get()和同名數據成員value:
class現在,如果子類Z的對象想要訪問X或者Y的同名成員函數,則需要使用作用域標識符,如下:
Z4、使用using將一個作用域的標識符引入到另一個作用域
除去上述作用域標識符以外,子類還可以通過使用using引入父類的同名標識符。using最常用的情況是:子類新增同名函數和父類同名函數的參數不同時(即重載形式),子類對象可以直接通過參數表,告訴編譯器需要訪問的同名函數屬于子類還是父類。
class通過子類對象z調用get函數時,編譯器根據參數形式不同,可以區分出調用的函數屬于X還是屬于Y。此時,get()和get(int)相當于子類重載的兩個函數。
總結
以上是生活随笔為你收集整理的c 子类对象 访问父类对象受保护成员_C++日志(三十四)子类同名成员与作用域分辨符...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 物联网之Zigbee系统开发一(zigb
- 下一篇: Yarn 安装与使用教程[通俗易懂]