我知道的大概是三种方法:
通过地址进行访问
通过友元函数
通过友元类
第二种和第三种是比较常见的做法,第一种可能不太常见
一,通过地址进行访问
这种方法能够使用只要是因为类的保存机制,类内只有成员变量和虚函数,所以可以利用地址来进行访问。
即通过
A a;
*((int*)&a);来实现
首先将a的地址取出来,然后转化为int型的地址,最后再用解引用为值:
#include
using namespace std;
class A
{
public:
A()
{
a = 1;
b = 2;
c = 3;
}
private:
int a;
int b;
int c;
};
int main()
{
A a;
int b = *((int*)&a);
cout << b << endl;
int b2 = *((int*)&a+1);
cout << b2 << endl;
int b3 = *((int*)&a+2);
cout << b3 << endl;
system("pause");
return 0;
}
二,通过友元函数
将函数声明为类的友元,那么类就会将函数当作自己人,然后就可以直接访问类的私有成员变量
#include
using namespace std;
class A
{
void friend show();
public:
A(){ a = 1; }
private:
int a;
};
void show()
{
A a;
cout << a.a << endl;
}
int main()
{
show();
system("pause");
return 0;
}
三,通过友元类
同上面一样,也是将声明为类的友元,然后友元类就能够访问类的私有成员变量
#include
using namespace std;
class A;
class B
{
friend A;
public:
B(){ a = 1; }
private:
int a;
};
class A
{
public:
void show()
{
B b;
cout << b.a << endl;
}
};
int main()
{
A a;
a.show();
system("pause");
return 0;
}