如何訪問乙個類的保護變數

2021-08-25 07:38:20 字數 1153 閱讀 2268

或許很多人看了我這個標題,很想打我:類的變數都私有了。你訪問個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...