c++ - 哪种方法更适合实现 get/set?

标签 c++ get set

有两种实现get/set的方法。

方法一:

分别定义get和set。

class my_class
{
  // ...
};

class main_class
{
public:

  my_class get_data() const
  {
    return m_data;
  }

  void set_data(my_class value)
  {
    m_data = value;
  }

private:

  my_class m_data;
};

注意:在此方法中,get 速度足够快:http://cpp-next.com/archive/2009/08/want-speed-pass-by-value

另外一种方法是(方法二):

定义两个获取体,第一个 const 和另一个非 const。

class my_class
{
  // ...
};

class main_class
{
public:

  const my_class& get_data() const
  {
    return m_data;
  }

  my_class& get_data() // Works like set.
  {
    return m_data;
  }

private:

  my_class m_data;
};

使用这些方法:

void main()
{
  main_class cls;

  // For method 1.
  my_class data;
  data = cls.get_data();
  cls.set_data(data);

  // For method 2.
  const my_class data1;
  my_class data2;
  data1 = cls.get_data();  // const get invoked.
  cls.get_data() = data2; // Like set beacuase non const get invoked.

}

我的问题是这些实现 get/set 的方法中哪一种更好?

你知道更好的方法吗?


编辑: 对于认为方法1更好的答案,您在以下情况下怎么说:

void main()
{
  main_class cls;

  // For method 1.
  cls.get_data().do_something_else(); // Not effictive for cls, because data losts.

  // For method 2.
  cls.get_data().do_something_else(); // Effictive for cls.    
}

最佳答案

您应该始终使用任何自定义类的引用来仅传递地址而不是值类。您还应该避免传回非常量引用进行编辑。我的建议见下文。

class my_class
{
  // ...
};

class main_class
{
public:

  const my_class & get_data() const
  {
    return m_data;
  }

  void set_data(const my_class & data)
  {
    m_data = data;
  }

private:

  my_class m_data;
};

关于c++ - 哪种方法更适合实现 get/set?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6830079/

相关文章:

c# - SendMessage 使用 RegisterWindowMessage API 失败

c++ - 如何检查类型是否为 mpl::apply-able?

c++ - 为什么堆栈中没有可变大小的数组?

C# outlook 按ID、用户名或别名搜索地址antry

PHP 获取整个字符串而不是 URL 中的单个参数

asp.net-mvc - MVC从动态字段获取数据

Python - 从另一个列表中删除一组列表

swift - fatal error : Only BidirectionalCollections can be advanced by a negative amount

python - frozenset() - 何时可以使用它们的示例

c++ - 移出三元运算符的一侧