有时候,我们提供给第三方的C++接口,不希望暴露类的私有数据成员,此时可以这样实现。
interface.h //对外接口
class B;
class A
{
private:
B *pb;
public:
A();
~A();
void getAge();
void setAge();
};
interface.cpp //内部实现
class B
{
private:
int age;
public:
B(int a);
friend class A;
};
B::B(int a){age = a;}
A::A():pb(new B(0))
{
}
A::~A()
{
delete pb;
}
int A::getAge()
{
return pb->age;
void A::setAge(int a)
{
pb->age = a;
}
这样,我们就通过类B将私有数据隐藏起来。对外提供的类A声明为类B的友元,这样就可以通过操作类B达到操作数据的目的。同时,因为类A只包含一个类B的指针,所以对外提供的接口也不需要类B的完全声明,达到了数据隐藏。
interface.cpp