私有成員變數的訪問(類內與類外)

2021-07-02 12:19:52 字數 822 閱讀 2177

1

class

ctest ;

1011 ctest::ctest(int

i):value(i)

1215

16 ctest::ctest(const ctest&rhs):value(rhs.value)

1720

21 ctest& ctest::operator=(const ctest&rhs)

2229

30void ctest::printctest(const ctest&rhs)

3134

35int

main()

361.確定符號的查詢域

如第26行**,當編譯器發現value變數時,它會在value變數所屬的物件rhs的類域中尋找該符號.

2.確定當前域中哪些符號可以訪問

由第1步可知,當前查詢的域是類域,而printctest函式在ctest類體中,所以printctest可以訪問ctest類中的所有變數(包括私有成員變數),因而value符號在ctest類域中被找到.

如第39行**,main函式不在ctest類體中,所以main函式不可以訪問ctest類域中的私有成員變數.(類外)

3.符號已查詢到,編譯通過

類成員變數的訪問許可權是編譯器強加的,編譯器可以找到value,通過編譯,自然就可以訪問到value變數的值.

直覺上,我們會以為第26行**中value符號的查詢域應該是物件rhs對應的作用域,然而c++編譯器的實現卻是在物件rhs的類域查詢value符號.

啟發:有些直覺是靠不住的,需要深入分析其背後的實現原理,才可以理解透徹.

在類外如何訪問私有成員

1 通過公共函式為私有成員賦值 class test void sety int b void printxy void int main 2 利用指標訪問私有資料成員 class test void sety int b void getxy int px,int py int main 3 利用...

派生類訪問基類的私有成員

派生類不能直接訪問基類的私有成員,若要訪問必須使用基類的介面,即通過其成員函式。實現方法有如下兩種 1.在基類的宣告中增加保護成員,將基類中提供給派生類訪問的私有成員定義為保護成員。2.將需要訪問基類私有成員的派生類成員函式宣告為友元。cpp include using namespace std ...

python 類私有成員

在python中定義私有變數只需要在變數名或函式名前加上 兩個下劃線,那麼這個函式或變數就會為私有的了。created on 2012 7 24 author administrator class test def test 1 self print test 1 is ok.def test 2...