• <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++認(rèn)知誤區(qū)(1):成員保護(hù)機(jī)制

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

            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可以直接通過(guò)成員訪(fǎng)問(wèn)運(yùn)算符訪(fǎng)問(wèn)?

                我開(kāi)始意識(shí)到自己對(duì)成員保護(hù)機(jī)制的認(rèn)識(shí)有誤,不知從什么時(shí)候起"對(duì)象.私有成員"的模式在大腦中就被一票否定了,這意味著默認(rèn)了成員保護(hù)機(jī)制是針對(duì)對(duì)象的。然而,"The Annotated C++ Reference Manual"對(duì)保護(hù)機(jī)制的精辟總結(jié):

            (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

            明確指出成員保護(hù)機(jī)制是針對(duì)類(lèi)的,且為編譯時(shí)機(jī)制。仔細(xì)一想,C++從來(lái)就未有在運(yùn)行時(shí)檢查成員訪(fǎng)問(wèn)合法性的機(jī)制,所有的檢查都在編譯期完成,此時(shí)根本不會(huì)產(chǎn)生對(duì)象,因而之前對(duì)該機(jī)制的認(rèn)知是有問(wèn)題的。BTW,第一點(diǎn)總結(jié)得甚好,運(yùn)行時(shí)可通過(guò)私有成員指針在外部訪(fǎng)問(wèn)的原因應(yīng)該很清楚了吧(這被認(rèn)為是fraud,:P)。

               生活、工作中會(huì)有各種各樣認(rèn)知誤區(qū),與自己認(rèn)知相悖的,不一定是錯(cuò)誤的,要搜尋客觀(guān)證據(jù),理性思考。

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

            Feedback

            # re: C++認(rèn)知誤區(qū)(1):成員保護(hù)機(jī)制 2010-04-25 16:50 guest

            Record& operator= (const Record& r);

            是Redcord的成員, 當(dāng)然可以訪(fǎng)問(wèn) Record 的私有成員
              回復(fù)  更多評(píng)論   

            # re: C++認(rèn)知誤區(qū)(1):成員保護(hù)機(jī)制[未登錄](méi) 2010-04-26 16:43 12

            編譯器的行為吧。我一直是GET SET出身的。。。  回復(fù)  更多評(píng)論   

            # re: C++認(rèn)知誤區(qū)(1):成員保護(hù)機(jī)制 2010-05-19 22:02 dtzleg

            因?yàn)槭窃赗ecord類(lèi)內(nèi)部函數(shù)
            如果是友元函數(shù),也可以

            否則根本通不過(guò)編譯的

            不過(guò),在模板里倒是有混過(guò)編譯期卻在執(zhí)行期訪(fǎng)問(wèn)違例的  回復(fù)  更多評(píng)論   

            亚洲精品国产综合久久一线| 91精品国产91久久久久福利| 亚洲欧美国产日韩综合久久| 久久久久亚洲AV无码观看| 久久国产高潮流白浆免费观看| 91精品国产91久久久久久| 合区精品久久久中文字幕一区| 精品免费久久久久久久| 久久国产视屏| 伊人久久精品线影院| 狠狠综合久久综合88亚洲| 久久99精品九九九久久婷婷| 亚洲国产精品无码成人片久久| 久久久久亚洲爆乳少妇无| 老色鬼久久亚洲AV综合| 中文字幕无码av激情不卡久久| 7国产欧美日韩综合天堂中文久久久久| 伊人久久亚洲综合影院| 久久国产乱子伦精品免费午夜| 精品久久8x国产免费观看| 蜜桃麻豆WWW久久囤产精品| 久久久久久av无码免费看大片| 嫩草影院久久国产精品| 精品无码久久久久久午夜| 少妇高潮惨叫久久久久久 | 亚洲精品tv久久久久久久久| 久久99精品国产99久久6| 久久精品免费一区二区三区| 久久狠狠高潮亚洲精品| 国产麻豆精品久久一二三| 午夜精品久久久久久99热| 18岁日韩内射颜射午夜久久成人 | 国产精品久久久久久久久| 亚洲国产精品无码久久一区二区 | 国产亚州精品女人久久久久久| 人妻无码中文久久久久专区| 久久亚洲私人国产精品| 97久久久精品综合88久久| 2022年国产精品久久久久| 久久九九全国免费| 一级做a爱片久久毛片|