C++ 中单一方法与获取/设置属性的重载? [关闭]
Posted
技术标签:
【中文标题】C++ 中单一方法与获取/设置属性的重载? [关闭]【英文标题】:Overload of single method vs get/set for properties in C++? [closed] 【发布时间】:2015-07-29 20:59:51 【问题描述】:我有一个类A
,其属性名为prop
,类型为int
。 getter 和 setter 通常是这样实现的:
class A
void set_prop(int value); // set
int get_prop() const; // get
是否有理由更喜欢这种设计,而不是使用两个同名的重载,如下所示?
class A
void prop(int value); // set
int prop() const; // get
我更喜欢最后一种形式(也许只是口味问题)。但我通常看到第一种形式。所以我想知道是否有深层次的理由更喜欢一个而不是另一个?也就是说,这只是风格问题,还是有一个面向对象的原则说一个比另一个更好?
【问题讨论】:
最好完全避免这种愚蠢的模式......你的const
呢?
第一个在C++中更具可读性和更广泛的应用。第二个是更多 .NET、属性驱动的语言类型交易,几乎与公开价值相同。最好避免前面提到的所有这些。
@LightnessRacesinOrbit Ups,忘记了const
。固定。
@becko:最接近的一票是我的,因为你在征求关于编码风格的意见。这是题外话。
@Jashaszun: Always..... 不改变其类实例的成员函数应标记为const
,以便可以在const
类实例上调用它(或通过其他方式) const
类类型的表达式)。如果函数没有改变它的类实例,那么禁止这样的调用(你可以通过省略const
)是没有意义的。如果不在这里,你什么时候使用成员函数const
?!而且我不知道返回类型与它有什么关系。
【参考方案1】:
选择第一种样式的基本原理是语义。一个(在这种情况下为成员)函数代表一个动作,调用函数的含义是请求执行关联的动作。因此,它们通常以动词命名:
get_property()
create_foo()
compute_bar()
show_button()
在某些情况下你在做什么也更清楚,例如在获取成员函数的地址时:
auto foo = &A::property;
// Is property a member function or a member variable here?
没有人阻止你选择第二种选择,事实上很多人use a mix of both 但第一种肯定更符合编程语言中函数或方法所代表的含义。
【讨论】:
【参考方案2】:从维护的角度来看,第一种形式更容易理解。
请记住,您不仅仅是为自己编程,而是为之后必须阅读/修改您的代码的每个人。所以我会使用第一种形式,因为函数名称很容易说明什么他们会的。
【讨论】:
什么“标准”?第一种形式实际上不是 C++ 标准使用的;第二种形式是。所以,嗯.. 已更改。我的意思是“标准”,因为第一种形式是我所看到的方式,并且愿意打赌大多数其他人也看到了。 “标准”在这样的事情上相当微不足道。我同意,最好用可读的东西。 这个“标准”写在哪里?如果这只是一个可读性的问题,那么这就是一个品味问题,我认为。我发现第二种形式更具可读性。无论如何,这是我的看法。 @LawrenceAiello:那里没有正确的“标准”含义。这是我的主要观点。 C++ 标准恰好不同意您的观点这一事实是一个具有讽刺意味的额外奖励;)【参考方案3】:您有两个同名的函数,但它们的职责是相互独立的。其中一种具有修改对象状态的副作用,另一种仅读取并返回对象的状态。我相信这里的基本原则只是关注点分离。
【讨论】:
以上是关于C++ 中单一方法与获取/设置属性的重载? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章