1.友元
类允许友元函数访问其非公有成员
class A
{
friend class B;
private :
int m_a;
};
class B
{
public:
void fun()
{
A a;
a.m_a = 1; // 访问A的私有成员
}
};
2.提供接口
在类里面提供共有函数接口
class A
{
public:
int GetMemberA() { return m_a; }
void SetMemberA(int a) { m_a = a; }
private:
int m_a;
};
class B
{
public:
void fun()
{
A a;
a.SetMemberA(1);
}
};
3.指针
想办法拿到那个私有成员的地址,绕过访问权限控制符
#include<iostream>
using namespace std;
class Test
{
private:
int data;
public:
Test() { data = 0; }
int getData() { return data; }
void printaddr()
{
printf("data ptr = %p\n", &data);
}
};
int main()
{
Test t;
int* ptr = (int*)&t;
*ptr = 10;
cout << t.getData() << endl;
t.printaddr();
printf("(int *)&t = %p\n", &t);
return 0;
}
运行结果:
10
data ptr = 0x7fff660979b0
(int *)&t = 0x7fff660979b0
4.#define方法(仅供思考)
#define private public