类的封装就是要将数据成员以及对数据的操作方法捆绑在一起,并且限制对类中私有成员的访问。在C++中,通过类的成员函数或者类的友元函数是可以访问类的私有成员变量。
那是否有什么方法不通过类的成员函数或者类的友元函数访问类中的私有成员变量呢?通过指针就可以办到,不过这其实是C++的缺陷,这种方法不推荐使用!
#include <iostream>
using namespace std;
class Test
{
private:
int x, m, n;
public:
int y;
int getx()
{
return x;
}
int gety()
{
return y;
}
int getm()
{
return m;
}
int getn()
{
return n;
}
};
int main()
{
Test tx;
int *t;
t = (int*)&tx;
*t = 17;
*(t+1) = 18;
*(t+2) = 19;
*(t+3) = 20;
cout << "x= " << tx.getx()<<endl;
cout << "y= " << tx.gety()<<endl;
cout << "m= " << tx.getm()<<endl;
cout << "n= " << tx.getn()<<endl;
return 0;
}
输出:
x = 17
y = 20
m = 18
n = 19
这并不是说c++的封装不起作用了,封装是避免类中的私有成员变量意外的改变,而以上这种方法是人为有意的去改变的。