类属性声明:私有vs公共

brs*_*nli 13 oop attributes class

定义私有属性而不是公共属性有什么好处?如果我可以将它们公开,为什么还要创建额外的工作来创建访问和修改私有属性的方法?

And*_*ant 11

在短期内没有,除了让OOP纯粹主义者不高兴.

(我假设你的意思是揭露否则会使用getter/setter的属性 - 显然,如果你将所有属性公开,那么会有很大的不同).

从长远来看,有一些很好的理由.

首先,它允许您在源头验证输入,而不是以后必须使用硬件断点和黑魔法的组合来回溯原点.

例如

void Foo::setWeight(float weight)
{
  ASSERTMSG(weight >= 0.0f && weight <= 1.0f, "Weights must fall in [0..1]");
  mWeight = weight;
}
Run Code Online (Sandbox Code Playgroud)

它还允许您以后更改对象的行为,而无需重构客户端代码.

例如

void Foo::setSomething(float thing)
{
  mThing = thing;
  // 2009/4/2: turns out we need to recalc a few things when this changes..
  ...
}
Run Code Online (Sandbox Code Playgroud)


Kal*_*ium 10

如果使用getter/setter,则可以在更改或访问时执行逻辑.您可以验证输入,而不是假设它总是正确的.您可以跟踪获取值的次数.

最重要的是,这是一个很好的设计.它为您,班级的开发人员提供了对其使用方式的更多控制,以及更好的防止滥用,滥用或只是某人做错事的能力.