類的封裝就是要將數據成員以及對數據的操作方法捆綁在一起,並且限制對類中私有成員的訪問。在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++的封裝不起作用了,封裝是避免類中的私有成員變量意外的改變,而以上這種方法是人爲有意的去改變的。