第五章 隐藏实现
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); }