张家子谦

在类的外面,其实也可以用指针访问类内部的私有成员,例如:

#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;
}

需要注意的是,使用这种方法虽然可以用于基于类的多态原则的一些程序开发,但违反了类的封装原则,在使用指针的类中也极不安全,所以不建议使用。