单个方法的重载vs C ++中属性的get / set?

时间:2015-07-29 20:59:52

标签: c++ properties

我有一个类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
}

我更喜欢最后一种形式(也许它仅仅是品味问题)。但我经常看到第一种形式。所以我想知道是否有更深层次的理由偏爱另一个?也就是说,这仅仅是一种风格问题,还是有一种面向对象的原则,即一种比另一种更好?

3 个答案:

答案 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)

您有两个具有相同名称的功能,但它们的职责彼此不同。其中一个具有修改对象状态的副作用,另一个只读取并返回对象的状态。我认为,这里的基本原则只是分离关注点。