读书人

C++访问种中私有成员变量的方法

发布时间: 2013-04-09 16:45:09 作者: rapoo

C++访问类中私有成员变量的方法

原则上,C++类中私有变量不允许在类之外的其他任何地方访问,一般来说功能完善的类都会提供get,set方法来操作类属性值,还有就是就是通过友元访问。但是!但如果没有get、set方法都没有提供,也没有定义友元,比如使用的是第三方提供的.o(或者动态库)来进行开发的,并且实际应用中我们确确实实需要改变其中某个对象的一个私有参数,有没有什么办法呢?还有一种比较文艺青年的方法,我们知道,一个进程有程序段和数据段,如果我们知道了对象的数据空间,那么得到该对象的成员变量值也就很简单了,而实际上,对象数据段的首地址其实就是对象地址,以例子说明:

方法1:普通青年

友元方法:

C++编译器将数据和程序段分开,所有的类变量会按照声明顺序依次存入数据段,所以,如果知道了第一个变量的地址,那么后面的地址也就依次累加即可逐一求出了。有了变量地址,那么也就可以对它的值进行修改了。还是以上面的例子来说明,一下程序编写了如何更改类成员b的值:

void f(){  A a;  *((int *)&a) = 5;}



  结论:
  程序员习惯于遵循既有的限制来增加既有的东西。
  黑客习惯于利用既有的东西来打破既有的限制。


1楼zhaojinjia昨天 20:09
牛逼啊
Re: sangni007昨天 20:29
回复zhaojinjian还是嘉爷不吝赐教的好啊~

读书人网 >C++

热点推荐