Phương pháp nào tốt hơn để triển khai get / set?

Có hai methos để triển khai get / set.

Phương pháp 1:

Xác định get và set riêng biệt.

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;
};

Lưu ý : Trong phương thức này, get đủ nhanh: http://cpp-next.com/archive/2009/08/want-speed-pass-by-value

Và một phương pháp khác là (Phương pháp 2):

Xác định hai nội dung nhận được, const đầu tiên và một khác không 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;
};

Sử dụng các phương pháp sau:

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.

}

Câu hỏi của tôi là phương pháp nào trong số các phương pháp này để triển khai get / set tốt hơn?

Bạn có biết phương pháp nào tốt hơn không?


Chỉnh sửa : Đối với các câu trả lời cho rằng Phương pháp 1 tốt hơn, bạn sẽ nói gì trong tình huống dưới đây:

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.    
}

16
задан Amir Saniyan 26 July 2011 в 12:47
поделиться