关于 C++ 中的访问器方法的几个问题已经在 SO 上被问到了,但没有一个能够满足我对此问题的好奇心。
我尽可能避免访问器,因为像 Stroustrup 和其他著名程序员一样,我认为一个类中有很多访问器是糟糕的 OO 的标志。在 C++ 中,在大多数情况下,我可以向类添加更多责任或使用friend 关键字来避免它们。但在某些情况下,您确实需要访问特定的类成员。
有几种可能:
1. 根本不要使用访问器
我们可以将各自的成员变量公开。这在 Java 中是不允许的,但在 C++ 社区中似乎没问题。但是,我有点担心应该返回对象的显式副本或只读(const)引用的情况,这是否夸张?
2.使用Java风格的get/set方法
我不确定它是否来自 Java,但我的意思是:
int getAmount(); // Returns the amount
void setAmount(int amount); // Sets the amount
3. 使用客观的 C 风格的 get/set 方法
这有点奇怪,但显然越来越常见:
int amount(); // Returns the amount
void amount(int amount); // Sets the amount
为了使其工作,您必须为您的成员变量找到一个不同的名称。有些人附加下划线,其他人则附加“m_”。我也不喜欢。
您使用哪种风格?为什么?
从我的角度来看,从维护的角度来看,我拥有 400 万行 C++ 代码(这只是一个项目),我会说:
如果成员是不可变的(即,不使用 getters/setters)是可以的。const
)或没有依赖关系的简单(如具有成员 X 和 Y 的点类)。
如果会员是private
只是跳过 getter/setter 也可以。我还统计了内部成员pimpl http://c2.com/cgi/wiki?PimplIdiom-类为private
如果 .cpp 单元较小。
如果会员是public
or protected
(protected
和一样糟糕public
)和非const
、非简单或具有依赖关系,则使用 getters/setters。
作为一名维护人员,我想要拥有 getter/setter 的主要原因是因为这样我就有地方放置断点/日志记录/其他东西。
我更喜欢替代方案 2. 的风格,因为它更易于搜索(编写可维护代码的关键组成部分)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)