在类的外面,其实也可以用指针访问类内部的私有成员,例如:
#include <iostream> using namespace std; class a // 定义了类a { long a0; // 定义私有成员 a0 public: a(long b) { a0=b; } void geta() { cout<<a0<<endl; } }; int main() { a b(5); // 定义对象b,并给 b 中的 a0 赋初值 long *p; p=(long*)&b; // 令指针 p 指向 b 中前 4 个字节,在这里相当于指向 a0 b.geta(); // 用内部函数访问 a0 cout<<*p<<endl; // 在外部直接访问 a0 *p=8; // 在外部改变 a0 的值 b.geta(); // 输出改变后的结果 cout<<*p<<endl; return 0; }
需要注意的是,使用这种方法虽然可以用于基于类的多态原则的一些程序开发,但违反了类的封装原则,在使用指针的类中也极不安全,所以不建议使用。