C++对象中的私有成员变量也可以被访问
2011-09-23 10:37
281 查看
C++对象中的私有(保护)成员变量也可以从对象外面访问。下面的代码会让你大吃一惊:
#include <iostream.h>
class TestClass{
private:
int a;
char b;
public:
char c;
TestClass(): a(29), b('b'), c('c'){ }
};
int main(int argc,char *argv)
{
TestClass* pObject = new TestClass();
int *p_int_a = (int*)pObject;
cout <<"The value of pointer p_int_a is: " << *p_int_a++ << endl;
char *p_char_b = (char*)p_int_a;
cout << "The value of pointer p_char_b is: " << *p_char_b++ << endl;
cout << "The value of pointer p_char_b is: " << *p_char_b << endl;
return 0;
}
其运行结果为:
为什么会这样?原因很简单:在C++中,private, protected只是程序逻辑上的一种保护,即如果破坏了这种规则(从对象外面访问private,protected成员),只是在编译器哪儿通不过。但通过指针可以直接读取对象中的私有变量,当然,前提是知道对象中成员变量的顺序和类型,否则读取的数据与我们需要的有偏差!
#include <iostream.h>
class TestClass{
private:
int a;
char b;
public:
char c;
TestClass(): a(29), b('b'), c('c'){ }
};
int main(int argc,char *argv)
{
TestClass* pObject = new TestClass();
int *p_int_a = (int*)pObject;
cout <<"The value of pointer p_int_a is: " << *p_int_a++ << endl;
char *p_char_b = (char*)p_int_a;
cout << "The value of pointer p_char_b is: " << *p_char_b++ << endl;
cout << "The value of pointer p_char_b is: " << *p_char_b << endl;
return 0;
}
其运行结果为:
为什么会这样?原因很简单:在C++中,private, protected只是程序逻辑上的一种保护,即如果破坏了这种规则(从对象外面访问private,protected成员),只是在编译器哪儿通不过。但通过指针可以直接读取对象中的私有变量,当然,前提是知道对象中成员变量的顺序和类型,否则读取的数据与我们需要的有偏差!
相关文章推荐
- 子类用反射可以访问父类中的私有成员变量及方法
- C++对象中的私有成员变量可以被访问
- 同一个类的不同对象,对象的成员函数可以互相访问各自对象的私有变量和私有成员函数
- C/C++—— 除了用类成员函数访问类私有成员变量外,还可以通过类对象地址来直接访问和修改类的私有成员变量
- 线程里面访问类的私有成员变量flag,不报错,诧异,求解!
- 何种情况下可以用对象名直接访问私有变量
- 类外部访问私有成员变量
- java反射访问私有成员变量
- c++中,同个类的不同实例可以相互访问对方的私有、保护成员
- 不用友元,访问类的私有成员变量的方法
- 线程里面访问私有成员变量 ,ok
- 使用类的反射机制来访问类的私有成员变量
- 静态成员函数不可以访问类中的成员变量
- iOS访问类的私有成员变量及私有方法
- c++访问私有(private)成员变量的常用方法
- C++ 为什么类的构造函数可以访问类的私有成员?解惑
- JavaSE8基础 final修饰类的成员变量,其只可以被访问,不能被修改
- c++中类对象不能访问类的私有成员变量
- c++中类对象不能访问类的私有成员变量
- python类的动态方法是否可以访问到私有变量。