之前在書上看到成員函數可以訪問類的私有變量的時候覺得是廢話嘛,如果成員函數都不能訪問那私有變量不就變成了花瓶了。然而發現自己還是太naive。
這句話的意思是:在類的作用域內,包含成員函數、靜態成員函數和友元函數內,可以訪問類對象的私有變量。
特殊的,對于成員函數來講,如果參數中有屬于同一個類的其他對象,那么我們還可以訪問其他對象的私有變量,而不僅僅是自己的。
可以這樣理解,在類的作用域內部,沒有所謂的權限控制,只有在外部才區分私有、保護和公有。
例如:
class A{int x = 1;
public:void test(A rhs);
};void A::test(A rhs) {cout << x + rhs.x << endl;
}int main() {ios::sync_with_stdio(false);A a, b;a.test(b);return 0;
}
上面代碼中,a
的函數test
中訪問了b
的私有變量x
,這是完全沒有問題的。