如何访问一个类的保护变量
来源:互联网 发布:中央新闻联播软件 编辑:程序博客网 时间:2024/05/21 10:41
或许很多人看了我这个标题,很想打我:类的变量都私有了。你访问个P啊。
不过事实上地球还真有类似的需求。
记得2004年的时候,那会做个小的游戏引擎,大部分的数据都是私有或者保护的,这些在应付游戏本身的时候已经完全足够了。但是后来做编辑器的时候,发现绝大部分私有或者保护的成员都是需要被外部访问到的。但是实在又不想每个函数都开个 T& GetXXX(). 这样跟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
{
public:
CImageList* GetToolbarImageList()
{
return &m_imagesToolbar;
}
CMFCOutlookBarToolBar* GetToolbar()
{
return &m_wndToolBar;
}
};
派生类当然顺理成章的能访问父类的。嘿嘿。
但是能从OutlookToolbar里拿到的只能是 CMFCOutlookbarTabCtrl. 怎么办呢?强行转换一下。C语言的无敌cast啊。
CMFCOutlookBarTabCtrlDerived* pDevired = (CMFCOutlookBarTabCtrlDerived*)m_pCurrOutlookWnd;
CImageList* pSmallImgList = (CImageList*)pDevired->GetToolbarImageList();
pSmallImgList->Add(pElement->hSmallIcon() );
搞定收工。
注意:此法比较卑鄙,未成年人请勿模仿。
- 如何访问一个类的保护变量
- 如何修改和访问方法中受保护的实例变量
- 对类的私有变量起保护作用的访问函数
- 全局的callback函数访问一个类的成员变量
- unity3d 使用c#如何访问某个对象里的c#脚本里的一个变量
- .NET中如何访问被系统保护的文件夹
- .NET中如何访问被系统保护的文件夹
- .NET中如何访问被系统保护的文件夹
- 具体的一个实例,展示如何访问实例变量和调用成员方法
- 如何访问函数内部的变量
- 如何访问类中的private成员变量
- 编码规范-如何定义一个优美的类变量
- 访问受保护的属性
- 如何在一个类中访问另一个类的方法?
- 如何获取一个变量的名字
- php 如何获取一个变量的名字
- golang如何得到一个变量的类型
- javascript的正则如何传递一个变量
- Java中的引用概念
- HDU 2241(搜索题,三分)
- 一阶负反馈的补偿特性
- input的属性值
- LCD屏幕设计的基本存储单元简介
- 如何访问一个类的保护变量
- Java反射机制学习笔记
- 对《30个提高Web程序执行效率的好经验》的理解
- 开个博客谢谢文章
- XHTML 简介
- 在线代码编译服务Codepad.org
- DBMS is not supported in your current installation解决
- 怎么样学习好JAVA的框架
- 深入学习CMS