C++ Primer Chapter 15-4

来源:互联网 发布:mac os dmg镜像下载 编辑:程序博客网 时间:2024/05/29 12:30
1:对于这些归根结底是为了保护数据, private 无论如何都是 private,因为从一开始就是 private,则至始至终都是要保护其数据对外不可见性 protect 只有在后续 private 继承要求变为 private 时,才会改变其属性,public 则无论何时何种继承就会变为何种类型。反观这些变化,会发现只能从 public 到public, protect,private; protect 到 protect ,private ; private 到 private; 也就是访问属性只可能越来越苛刻,只会升级,不会降级

2:出现继承和派生之后会出现三种类的用户:普通类使用者基类设计者(实现类)派生类设计者(实现类)
基类中的 protect 成员可以为基类设计者直接使用,也可以派生类设计者直接使用;
基类中的 private 成员可以为基类设计者直接使用,派生类设计者不可以直接使用。

3:基类实现如果希望派生类设计时可以,则应声明为 protect ,如果不希望派生类设计可以用,声明为 private

4:友元不具有传递性,也不具有继承性。

5:一个类 Base 的友元可以访问其所有成员,包括 在 Base 的派生类中 属于 Base的部分数据成员,其友元也可以访问。虽然这看起来很怪,但是仔细考虑 一个类的成员访问属性只有该类自己控制,在派生类中的继承而来的成员也由该被继承的类控制,而不由派生类控制。

6:虽然在继承的关系中我们希望保护数据的安全性,像 1 中所说那样,但是有时候我们的确需要改变一个成员的访问属性,那么可以人为强制用 using 声明。 在对应的访问说明符下 using base::mem; 这样一句话,就可以改 mem 派生类中特定访问属性

注:派生类只可以对其可以访问的名字提供 using 声明。如果自己都访问不了怎么保证其用户可以访问。本质还是保护数据。

7:struct 和 class 声明的类的唯一差别就是默认的成员属性继承属性,struct 默认为 public,class 默认为 private

8:所有关于访问的属性问题,归根结底是为了保护数据的安全性程序的安全性

9:派生类的作用域嵌套基类的作用域之内的。而且一直嵌套到最顶层

10:即使动态类型静态类型不一致,但是决定我们能否访问一个成员或者变量决定权在与静态类型

11:由于作用域的嵌套关系,那么派生类中的同名成员将会隐藏基类中的成员。但是我们可以用作用域运算符使用隐藏基类成员

12:名字查找先与类型检查。一旦查找成功就不在查找了
0 0
原创粉丝点击