学习笔记-----关于C++中类的成员函数可以访问私有成员的问题
直接上代碼吧
大致就是這樣,主要考慮拷貝構(gòu)造函數(shù)vectorList(const vectorList<T> & rhs);該函數(shù)的定義如下:
template<class T> vectorList<T>::vectorList(const vectorList<T>& rhs) : element(vector<T>(rhs.vectorLength)), vectorLength(rhs.vectorLength), listSize(rhs.listSize) { copy(rhs.element.begin(), rhs.element.end(), element); }
顯然,在這個成員函數(shù)中rhs直接訪問了自身的私有成員vectorLength和listSize
而如果在main.cpp里也這樣調(diào)用的話就是錯的
vectorList<int> vec(2); cout << vec.vectorLength << endl; 錯誤:編譯器會提示沒有訪問權(quán)限查了一些資料發(fā)現(xiàn)
1:與C++機(jī)制有關(guān),是C++特殊規(guī)定的操作,因為類是設(shè)計者自己設(shè)計的,設(shè)計者完全知道類內(nèi)部的組成,不需要對設(shè)計者隱藏。而使用者即用戶不知道類的內(nèi)部結(jié)構(gòu),所以分出Public,protected,和private.而且不能再main中調(diào)用
2:訪問限定符public,protected,private是對其他的類和其他的操作而言的,即如果兩個對象屬于一個類:上述rhs和*this,在其中一個對象的成員函數(shù)中是可以直接調(diào)用另一個對象的私有或者保護(hù)成員的
3:因為類的接口與封裝已經(jīng)是安全的(對外不可見的),所以在類內(nèi)部這樣使用是不存在不安全問題的
4:如果沒有這一機(jī)制,則上述拷貝構(gòu)造函數(shù)的初始化就需要在類內(nèi)增加一些成員函數(shù)來返回私有或者保護(hù)成員。
總結(jié)
以上是生活随笔為你收集整理的学习笔记-----关于C++中类的成员函数可以访问私有成员的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习笔记-----关于VS中使用模板类出
- 下一篇: 学习笔记-----C++模板类中友元函数