或許很多人看了我這個標題,很想打我:類的變數都私有了。你訪問個p啊。
不過事實上地球還真有類似的需求。
記得2023年的時候,那會做個小的遊戲引擎,大部分的資料都是私有或者保護的,這些在應付遊戲本身的時候已經完全足夠了。但是後來做編輯器的時候,發現絕大部分私有或者保護的成員都是需要被外部訪問到的。但是實在又不想每個函式都開個 t& get***(). 這樣跟public沒啥區別了。
一氣之下,就在編輯器裡stdafx.h裡直接把 protected和private全部define成public了。 我的引擎當時是以源**的形式編譯的。這個一點問題都沒有。
前段時間使用vs 2010的mfc outlook tabbar。我的outlook tabbar是在外掛程式裡建立的。有幾個頁也是由外掛程式數量決定的。於是悲劇來了。那個小圖示的imagelist 是個私有的變數。 而且,我必須得動態往這個imagelist裡新增icon。。不然。。。哼哼。。
這裡因為mfc不是我自己的東西。我不能把protected給定義成public。除非我把mfc的**全加到工程裡來自己編譯。否則會導致unresolved symbol的。憋了半天。想了個損招:
cmfcoutlookbartabctrl 這個是包含了imagelist的類。是mfc的。怎麼辦的?有啥辦法能訪問到proteced的變數呢?那就是派生了。
於是:class cmfcoutlookbartabctrlderived: public cmfcoutlookbartabctrl
cmfcoutlookbar******** get*******()
};派生類當然順理成章的能訪問父類的。嘿嘿。
但是能從outlook*******裡拿到的只能是 cmfcoutlookbartabctrl. 怎麼辦呢?強行轉換一下。c語言的無敵cast啊。
cmfcoutlookbartabctrlderived* pdevired = (cmfcoutlookbartabctrlderived*)m_pcurroutlookwnd;
cimagelist* psmallimglist = (cimagelist*)pdevired->get*******imagelist();
psmallimglist->add(pelement->hsmallicon() );
搞定收工。
注意:此法比較卑鄙,未成年人請勿模仿。
如何訪問乙個servelt類物件
自己寫乙個類,通常名字為 controller 又可為servelt action 一般 與html名字相對應 繼承乙個父類httpservlet 重寫乙個方法service 方法中有httpserveltrequest httpserveltresponse 方法中還有兩個異常serveltexc...
C 乙個類訪問另乙個類的私有成員和保護成員
友元類 class a friend class b private int aa class b public void output cout a.aa endl private a a 使用友元類時注意 1 友元關係不能被繼承。2 友元關係是單向的,不具有交換性。若類b是類a的友元,類a不一定...
PHP反射 強行訪問乙個受保護的方法
我們知道,類的protected方法是無法通過物件來訪問的,這是處於安全考慮。如果要訪問這個方法,通常的做法是在建立乙個public方法來間接呼叫。這裡我們使用反射來實現訪問。class test obj new test var dump obj meth php fatal error unca...