《c++编程思想》阅读笔记(3)
虽然将数据和函数捆绑在一起很有好处,并使得库容易使用,因为这可以通过隐藏名字防止名字冲突,但是,还有大量的工作可以使c++程序设计更加安全。
第3章: 隐藏实现
1)需要控制对结构成员的存取有两个理由:一是让用户避开一些他们不需要使用的工具,这些工具对数据类型内部的处理来说是必须的,但对于用户特定问题的接口来说却不是必须的。这实际上是维用户提供了方便,因为他们可以很容易地知道,对他们来说哪些是重要的,哪些是可以忽略的。二是设计者可以改变struct的内部实现,而不必担心对用户程序员产生影响。
2)c++语言引进了三个新的关键字,用于在struct中设置边界:public、private、protected。这些存取指定符只能在class或struct声明中使用,他们可以改变在它们之后的所有声明的边界。使用存取指定符,后面必须跟上一个冒号。
3)public意味着在其后声明的所有成员对所有的人都可以存取。private则意味着,除了该类型的创建者和类的内部成员函数以外,任何人都不能存取这些成员。private在设计者与用户之间筑起了一道墙。protected与private基本相似,只有一点不同:继承的结构可以访问protected成员但不能访问private成员,现在先把这两种指定符看成一样来看待,直到介绍了继承后再区分这两个。
4)如果程序员想允许不属于当前结构的一个成员函数存取结构中的数据,他可以在struct的内部声明这个函数为友元。一个友元必须在一个struct内声明。因为编译器必须能够读取这个结构的声明以理解这个数据类型的大小、行为等方面的规则,有一个规则在任何关系中都很重要,那就是“谁可以访问我的私有实现部分”
程序员可以把一个全局函数声明为友元类,也可以把另一个struct中的成员函数甚至整个struct都声明为友元类。举个例子