我一直想知道我已经在我的游戏引擎和游戏中使用了很长时间的设计。假设我们有一个 Object 类
class Object
{
public:
const std::string& getName() { return m_name; }
private:
std::string m_name;
}
然后,我有一个叫做 ObjectManager 的类,它包含一个 Object 的实例。现在,我一直在想是否应该在 ObjectManager 中将该实例保持私有(private)并复制代码,以便它可以调用 getName(),或者将 Object 设为 public,这违背了封装的概念。大家觉得哪个设计更好呢?
谢谢你的帮助!
最佳答案
如果您的类包含可供其他人使用的对象,请将其公开。封装是为了隐藏做某事所需的变量。某些数据成员不属于这种情况。
例子:
人汤姆;
tom.getEyes().getColor();
tom.getMouth().eat(tomato);
tom.legs().walk();
人可以隐藏一切,但会很麻烦:
tom.getEyesColor(); // accessor for every eye feature
tom.eat(tomato);
tom.walkAndEat(); // every possible combination of actions
进一步的例子:
grid.row(3).col(5).setText("hello");
在这里,列类可以公开许多方法,而不必触及网格类。这就是面向对象编程的美妙之处。
如果您将类命名为 ObjectManager,我会感觉它正在为其他人管理 Object 实例,因此您应该公开它。使用继承的另一个想法也是有效的:
class ObjectManager : public Object
{
};
关于c++ - 类接口(interface)查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18027981/