寒星轩

There are innumerable stars in the sky, the smallest is me!

用户操作
[即时聊天] [发私信] [加为好友]
李星ID:starlee
207914次访问,排名342(1)好友65人,关注者107
欢迎大家访问我的Blog。
主要是C++,设计模式,面向对象设计方面的技术文章。
starlee的文章
原创 98 篇
翻译 0 篇
转载 45 篇
评论 331 篇
李星的公告
郑重声明

        本BLOG所发表的 原创文章,作者保留一切权利。必须经过作者本人同意后方可转载,并注名作者(StarLee)和出处(CSDN Blog)。
作者Email:
coolstarlee(at)sohu.com
最近评论
陈诚:好象不一样,我这个共两个类,实现类和接口类
深夜才走在路上:实际上使用CLR封送C++类让人很受伤,在mc中有很多C++的特性不能使用,甚至STL都不可用
hfg :错了错了,当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。

不管基类的析构函数是不是virtual ,派生类的析构函数还是会被调用的,区别只是在于基类的析构函数有没有被调用
Forrest Yu:Star Lee:

如果有两个以上的类需要包装,那又应该怎样做呢?
Forrest Yu:CLR 还是很强大的,
一些老的MFC项目可以先手动添加
#include <afx.h>,
其他的可能要加
#include <windows.h>,
然后再用这种方法.
文章分类
收藏
相册
友情链接
houdy的专栏
lijgame的专栏
lyrebing的专栏
禾青谷
存档
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 C++中巧用#define访问类的私有成员收藏

新一篇: C++中重载决议与可访问性检查的顺序 | 旧一篇: STL中mem_fun和mem_fun_ref的用法

    我们知道,类的私有成员在类的外部是不能被访问的。
    例如有下面的这个简单的类:

class ClxECS
{
private:
    
int iPrivate;
};

     那么下面的这个函数是不能通过编译的:

void ECS_test()
{
    ClxECS lx;
    lx.iPrivate 
= 13;

    cout 
<< lx.iPrivate << endl;
}

    但是,我们并不是没有办法来访问类的私有成员。
    其实,方法很简单,只要在类的声明前面加上如下一行代码就行了:

#define private public

    同样的,这个方法对保护成员也适用:

#define protected public

    但是,这是一个非正规的手段,它将破坏类的所有封装性。而C++中的#define的存在也是为了跟C兼容。所以只有在非常特殊的情况下,才会用这种非正规方法访问类的私有或保护成员。

发表于 @ 2006年11月22日 09:11:00|评论(loading...)|编辑

新一篇: C++中重载决议与可访问性检查的顺序 | 旧一篇: STL中mem_fun和mem_fun_ref的用法

评论

#AgedBOY 发表于2007-02-27 10:43:48  IP:
呵呵,真够狠的~~
#agaric 发表于2007-03-05 20:27:20  IP: 222.90.15.*
赖皮..
#windleaf_2006 发表于2007-08-31 10:55:38  IP: 58.211.28.*
这办法也不是万能的,比如我这么写:

class ClxECS
{
int iPrivate;
};

class成员的默认权限就是private,躲过预处理,没招了吧。
2007-08-31 12:29:02作者回复
你比我还狠!
#luodongshui 发表于2007-10-02 18:34:43  IP: 121.35.253.*
终极办法:
#define private public
#define class struct
2007-10-03 11:57:15作者回复
哈哈哈……遇到一个更狠的!!!
#furniture 发表于2007-10-30 11:08:40  IP: 219.134.114.*
呵呵!~~~
#coolage31 发表于2007-11-01 11:16:29  IP: 218.104.34.*
都是牛人啊 长见识了
#Demon__Hunter 发表于2008-05-01 16:38:15  IP: 202.118.2.*
可以用指针 *(int*)&lx=13;
发表评论  


登录
Csdn Blog version 3.1a
Copyright © 李星