我有一个类A
,其中包含prop
类型int
的属性。吸气剂和制定者通常按如下方式实施:
class A
{
void set_prop(int value); // set
int get_prop() const; // get
}
是否有理由更喜欢这种设计,而不是使用两个具有相同名称的重载,如下所示?
class A
{
void prop(int value); // set
int prop() const; // get
}
我更喜欢最后一种形式(也许它仅仅是品味问题)。但我经常看到第一种形式。所以我想知道是否有更深层次的理由偏爱另一个?也就是说,这仅仅是一种风格问题,还是有一种面向对象的原则,即一种比另一种更好?
答案 0 :(得分: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但第一个肯定与编程语言中函数或方法所代表的更好地对齐。
答案 1 :(得分:0)
从维护角度来看,第一种形式更容易理解。
请记住,您不仅仅是为您编程,而且适用于之后必须阅读/修改代码的每个人。所以我会选择第一个表单,因为函数名称很容易说出他们做了什么。
答案 2 :(得分:0)
您有两个具有相同名称的功能,但它们的职责彼此不同。其中一个具有修改对象状态的副作用,另一个只读取并返回对象的状态。我认为,这里的基本原则只是分离关注点。