假设我有一个类Foo,其中bar_包含一个包含某个状态的私有变量Foo.如有必要,我可以编写公共get/set方法bar_.当然,我尽可能地避免这种情况来维持封装.
假设我有这些get/set方法,每当我必须bar_在属于的方法中访问或修改时Foo,我通常直接执行它bar_,而不是使用get/set方法,我用它来bar_从类外部进行访问.除了关于直接访问变量的速度与调用方法的关注之外,我没有任何理由,但我怀疑如果get/set方法是内联定义的(它们是),它应该没有区别.这有什么不同吗?是否const内斯在其中发挥的作用?
到目前为止,我没有遇到任何问题,但我有一种挥之不去的感觉,我做错了.没有做任何令人信服的论据吗?关于这个的任何指导?
T.E*_*.D. 14
我知道它接近于此,但我讨厌获取/设置方法.厌恶他们.几乎从不写它们.
一般来说,一个类应该提供比直接更多的高级操作,并且只是简单地读取和修改内部状态变量,或者它应该偏离方式并且行为就像struct它一样.
即使我写一个,我几乎从来没有使用它里面的类.它们的重点在于您可以在不影响客户的情况下更改事物的内部表示.在课堂上,它是你关心的内部表现!如果你想在类中使用自己的接口对类进行大量操作,那么你可能会有第二个类在那里争取离开.
除了关于直接访问变量的速度与调用方法的关注之外,我没有任何理由,但我怀疑如果get/set方法是内联定义的(它们是),它应该没有区别.这有什么不同吗?constness在这方面发挥了作用吗?
内联关键字在编译器是否进行任何内联时几乎不起作用.在这方面对关键字的使用基本上已被弃用.现代编译器内联就像疯了一样,他们知道什么时候可以更好地完成任何程序员的工作.
任何值得污垢的编译器会说"嗯,调用这个函数来获取这个成员变量;嘿,我可以得到成员变量!" 你什么都不担心.无论任何内联关键字,都会发生这种情况
也就是说,我几乎总是使用成员函数.如果我改变变量在访问时的行为方式,我现在"自动"应用它在任何地方使用它.干净的代码应该是你的目标,但不是教条"总是跳过功能".
任何时候我只想要一个变量值,我使用相应的成员变量.(也就是说,如果我在写作std::vector,如果我需要检查尺寸是否小于某些东西,我会说size() < x).但是如果直接使用变量更清晰,那就改为使用变量mSize++.
const - 无关紧要.如果你处于非const函数中,你将使用getter的非const版本,与const相同.显然,使用成员直接维持const-ness.没有区别.