在C++中引入受保护访问说明符的原理是什么?一个例子会很有帮助。引入受保护访问说明符的原理
回答
protected
访问级别用于类需要与其继承者一起工作。
例如,想象一个抽象的Shape
类,它可以向外界报告其面积。
不同形状(如三角形,正方形和圆形)的描述方式不同(角度,边,半径),并计算其区域的方式不同。
Shape
类可能有一个公开的getArea()
方法,该方法返回一个保存该区域的私有变量。
设置此变量的最佳方法是protected
方法,称为setArea(double)
,该方法将由子类调用。
因此,Circle
会叫setArea(PI * radius * radius)
,Square
会叫setArea(side * side)
等
注意,这不一定是一个好的设计(但它的protected
一个很好的例子)
最好的方法可能会使用虚拟'getArea'方法。 – 2010-06-06 10:48:38
@Matthieu:是的,但这意味着每次调用时都要重新计算该区域。 – SLaks 2010-06-06 11:41:09
不一定,它取决于派生形式来决定是否值得缓存结果。 – 2010-06-06 13:50:57
对于此类问题,我推荐Bjarne Stroustrup的C++的设计和进化。第13.9节描述了受保护成员的演变。
不久后发布1.0 Cfront的的],马克·林顿停止了我的办公室,并提出了存取控制的第三级慷慨激昂[...]他认为令人信服基于与实际代码真正的经验和实例受保护的数据对于设计高效且可扩展的X windows工具包至关重要。 [...]这些都是很好的论据,基本上是让我相信允许保护成员的论据。 [...]
五年左右的时间后,马克禁止使用受保护的数据成员的采访 [提到的X窗口工具箱早些时候],因为他们已经成为错误的来源。 [...]他们也使维护工作严重复杂[...]
受保护的成员被引入到版本1.2。版本2.1中首先描述了受保护的基类。回想起来,我认为
protected
是一个“良好的论据”和时尚克服我的更好的判断和我的经验法则接受新功能的情况。
我完全同意,受保护的数据成员违反了封装。我只使用受保护的方法。 – 2010-06-06 10:52:47
@Matt:在我看来,类中的字段应该总是隐含地是私有的,没有任何机制来阻止它,因为公共字段和受保护字段都会破坏封装。 – fredoverflow 2010-06-06 11:38:55
我在这里有非常相同的意见。如果您公开数据成员,则无法强制执行类不变。 – 2010-06-06 13:53:26
- 1. 受保护的访问
- 2. C++受保护的访问
- 3. 访问说明符受保护和内部保护在C#之间有什么区别#
- 4. 访问说明符
- 5. 在派生类中使用受保护的说明符
- 6. Java - 访问说明符
- 7. 保护原理
- 8. 访问受保护的对象数组
- 9. 如何访问受保护的成员
- 10. 不能访问受保护的特性
- 11. 访问受保护的变量在googletest
- 12. Java:跨包的受保护访问
- 13. 访问klarna API的受保护成员
- 14. 关于访问受保护的方法
- 15. 访问Android类的受保护变量
- 16. Python中的“受保护”访问 - 如何?
- 17. Ajax访问受保护的资源
- 18. 访问受保护的成员
- 19. 无法访问受保护的成员?
- 20. 接口声明的访问说明符
- 21. 访问说明
- 22. 访问共享文件夹(受保护)
- 23. Jaspic:处理访问不受保护的资源
- 24. Jaspic:处理访问受保护的资源
- 25. 保护访问修饰符
- 26. 访问说明符和访问修饰符有什么区别?
- 27. XML受保护字符
- 28. Java:变量访问说明符
- 29. =默认忽略访问说明符?
- 30. 访问说明符和虚函数
原因似乎是“我们需要做一些事情来使语言比需要的更加复杂,而且比应该更脆弱,这样顾问可以为恶劣的工作收取巨额费用”。 – 2010-06-06 10:11:07