• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Heath's Blog

            There is no end, it is just the beginning! - A Game Developer's Notes

            C++認知誤區(1):成員保護機制

                C++將struct/class的成員保護粒度劃分為:public、protected、private,這在語言入門時就應知曉的。然而前幾天遇到的一段代碼,卻讓我琢磨了許久:

            class Record
            {
            public:
            	Record& operator= (const Record& r)
            	{
                    	file = r.file;
            		offset = r.offset;
            		return *this;
            	}
            	...
            private:
            	unsigned char *offset;
            	NBFile &file;
            		...
            };

                為什么作為private成員的offset和file可以直接通過成員訪問運算符訪問?

                我開始意識到自己對成員保護機制的認識有誤,不知從什么時候起"對象.私有成員"的模式在大腦中就被一票否定了,這意味著默認了成員保護機制是針對對象的。然而,"The Annotated C++ Reference Manual"對保護機制的精辟總結:

            (1) Protection is provided by compile-time mechanisms against accident, not against fraud or explicit violation.
            (2) Access is granted by a class, not unilaterally taken.
            (3) Access control is done for names and does not depend on the type of what is named.
            (4) The unit of protection is the class, not the individual object.
            (5) Access is controlled, not visibility

            明確指出成員保護機制是針對類的,且為編譯時機制。仔細一想,C++從來就未有在運行時檢查成員訪問合法性的機制,所有的檢查都在編譯期完成,此時根本不會產生對象,因而之前對該機制的認知是有問題的。BTW,第一點總結得甚好,運行時可通過私有成員指針在外部訪問的原因應該很清楚了吧(這被認為是fraud,:P)。

               生活、工作中會有各種各樣認知誤區,與自己認知相悖的,不一定是錯誤的,要搜尋客觀證據,理性思考。

            posted on 2010-04-24 16:16 Heath 閱讀(2535) 評論(3)  編輯 收藏 引用 所屬分類: Programming LanguageStudying

            Feedback

            # re: C++認知誤區(1):成員保護機制 2010-04-25 16:50 guest

            Record& operator= (const Record& r);

            是Redcord的成員, 當然可以訪問 Record 的私有成員
              回復  更多評論   

            # re: C++認知誤區(1):成員保護機制[未登錄] 2010-04-26 16:43 12

            編譯器的行為吧。我一直是GET SET出身的。。。  回復  更多評論   

            # re: C++認知誤區(1):成員保護機制 2010-05-19 22:02 dtzleg

            因為是在Record類內部函數
            如果是友元函數,也可以

            否則根本通不過編譯的

            不過,在模板里倒是有混過編譯期卻在執行期訪問違例的  回復  更多評論   

            丁香久久婷婷国产午夜视频| 99精品国产99久久久久久97| 国产精品一久久香蕉国产线看| 久久99亚洲网美利坚合众国| 亚洲国产精品久久久久婷婷老年| 久久综合久久鬼色| 色婷婷综合久久久久中文 | 久久中文字幕人妻丝袜| 久久偷看各类wc女厕嘘嘘| 国产成人精品久久综合| 香蕉久久av一区二区三区| 久久精品中文字幕一区| 久久99精品久久久久子伦| 性高湖久久久久久久久AAAAA| 99久久人妻无码精品系列蜜桃| 99久久精品无码一区二区毛片 | 久久国产免费直播| 久久国产精品无码HDAV| 久久99精品国产麻豆宅宅| 久久AAAA片一区二区| 97久久久精品综合88久久| 精品久久久无码人妻中文字幕 | 久久99精品久久久久久| 久久婷婷色香五月综合激情| 久久福利片| 国产香蕉97碰碰久久人人| 色综合久久精品中文字幕首页 | 久久国产精品无码一区二区三区 | 久久99精品久久久久久齐齐| 久久99精品综合国产首页| 久久不见久久见免费视频7| 精品一二三区久久aaa片| 久久亚洲精品成人无码网站| 午夜精品久久久久久影视riav| 日本欧美国产精品第一页久久| 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久99国产综合精品免费| 伊人久久大香线蕉av不变影院 | 模特私拍国产精品久久| 久久婷婷午色综合夜啪| 久久精品国产亚洲av麻豆蜜芽|