在自己编写代码或者阅读别人的代码时,我们经常会遇到类的访问限制符public,private,protected。对于前两个public和private的使用我们很好理解:
- 类成员变量一般修饰为private,防止类使用者不受约束地直接修改数据;
- 类成员函数一般修饰为public,提供给使用者进行调用;
- 某些类成员函数有时候也修饰为private,方便类内的成员函数在实现某些稍微复杂的功能是去调用,而对于类的使用者,无需了解到类内的方法是如何实现的。
那么问题来了,protected在什么情况下使用呢?
说到protected,就不得不提到C++面向对象的一大特性:继承。如果没有继承这个机制,也就无需有protected存在的意义。如果一个类用protected修饰其成员变量或者函数,那么这个类的子类可以拥有访问这个成员变量或者函数的权利,而其他类仍然像private的限制一样无法访问这个类的protected成员。
这样,重点来了。我认为,protected用在这样一个场合:用protected修饰的成员一般具有很高的而且相对基础使用价值。也就是说,其他类内的成员函数在实现自己功能的时候,会使用到protected修饰的成员。那么,具有这么高的使用价值,这么个宝贝,在继承的时候,就应该提供给自己的子类。这也是对“继承”的直观理解。这样,基类的子类在实现自己的成员函数或者重写基类的成员函数的时候,就可以调用基类protected修饰的成员来使用。
但是,为什么不直接把这样的成员用public修饰呢?我想是因为为了保持类对外使用的简洁性。类只要把自己的基本功能提供给使用者,至于这些功能的实现细节,是否用到了其他的函数,外界不需要知道也不能知道,只有自己的子类知道而且可以使用,因为它是继承人。
如果以后发现有其他的使用情景,再来更新。