【发布时间】:2025-11-26 23:55:02
【问题描述】:
我听说有人说拥有protected 成员会破坏封装点并且不是最佳实践,应该设计程序使得派生类不需要访问private 基类成员。
示例情况
现在,想象以下场景,一个简单的 8 位游戏,我们有一堆不同的对象,例如,常规框充当障碍物,尖峰,硬币,移动平台等。列表可以继续。
它们都具有x 和y 坐标、一个指定对象大小的矩形和碰撞框,以及一个纹理。他们还可以共享设置位置、渲染、加载纹理、检查碰撞等功能。 p>
但其中一些还需要修改基本成员,例如盒子可以被推来推去,因此它们可能需要移动功能,一些物体可能会自行移动,或者某些块可能会在游戏中改变纹理。
因此,像 object 这样的基类确实可以派上用场,但这需要大量的 getters - setters 或 private 成员才能成为 @ 987654326@ 代替。无论哪种方式,都会损害封装性。
鉴于轶事背景,这将是一个更好的做法:
1. 有一个具有共享函数和成员的公共基类,声明为受保护。能够使用常用函数,将基类的引用传递给只需要访问共享属性的非成员函数。但妥协封装。
2. 为每个类设置一个单独的类,将成员变量声明为私有且不损害封装性。
3。一个我想不到的更好的方法。
我不认为封装是非常重要的,并且可能只是拥有受保护的成员,但我对这个问题的目标是编写一个经过良好实践的标准代码,而不是解决那个特定问题。
提前致谢。
【问题讨论】:
-
“我听说有人说拥有
protected成员有点破坏封装的点,这不是最佳实践......”这是不正确的,此时你应该停止倾听并咨询更权威的来源,如Design Patterns。
标签: c++ inheritance encapsulation