简介:讨论结构中的边界(访问控制)
5.1 设置限制
控制对结构成员的访问的理由:
1. 让客户程序员远离一些他们不需要的工具。
2.允许库的设计者改变struct的内部实现,而不必担心会对客户程序员产生影响。
5.2 C++的访问控制
public、private、protected:继承结构可以访问protected成员,但不能访问private成员。
5.3 友元
friend(友元):允许显式地不属于当前结构的一个成员函数访问当前结构中的数据。
struct X; // 不完全类型说明(incomplete type specification)
friend可以在声明函数的同时又将它作为struct的友元。
嵌套友元:嵌套的结构并不能自动获得访问private成员的权限。要获得访问私有成员的权限,必须遵守特定的规则:
1. 首先,声明(而不定义)一个嵌套结构。
2. 然后,声明它是全局范围使用的一个friend。
3. 最后,定义这个结构。结构的定义必须与friend的生命分开,否则编译器将不把它看作成员。
5.4 对象布局
访问块:被访问说明符限定的一组声明。
在一个特定的访问块内,这些变量的存放都是连续的,但不一定按照声明的顺序存放。
访问说明符是结构的一部分。访问说明信息是在编译期间消失的。在程序运行期间,对象变成了一个存储区域,别无他物。
5.5 类
访问控制通常是指实现细节的隐藏(implementation hiding)。
class与struct的每个方面都一样,除了:class中的成员默认为private,而struct中的成员默认为public。
问题:c05:Class.cpp中a.f()和b.f()的输出结果为什么一样?
所有成员必须在类中声明的唯一原因是:让编译器中知道对象有多大,以便为它们分配合适的存储空间,并保证他们的一致性。
5.6 句柄类
隐藏实现和减少重复编译
网友评论