第五章 隐藏实现
1 给数据和函数增加边界
给函数和数据增加边界的理由:a 屏蔽掉客户程序员不需要知道的细节。b 允许库设计者改变struct的内部实现,而不用担心会对客户程序带来影响
2 友元
为了能让非本结构的函数改变本结构中的private数据,在该结构中声明友员函数即可实现。
struct X;
struct Y
{
void f(X*);
};
struct X
{
private:
int i;
public:
void initialize();
friend void g(X*,int);//友元
friend void Y::f(X*);//友元
friend struct Z;//友元
friend void h();//友元
};
void X::initialize()
{
i = 0;
}
void g(X* x,int i)
{
x->i = i;
}
void Y::f(X* x)
{
x->i =47;
}
struct Z
{
private:
int j;
public:
void initialize();
void g(X* x);
};
void Z::initialize()
{
j =99;
}
void Z::g(X* x)
{
x->i + =j;
}
void h()
{
X x;
x.i = 100;
}
int main()
{
X x;
Z z;
z.g(&x);
}