Quelle méthode est la meilleure pour implémenter get / set?

Il y a deux methos pour la mise en œuvre get/set.

Méthode 1:

Définir obtenir et de définir séparément.

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

Note: Dans cette méthode get est assez rapide: http://cpp-next.com/archive/2009/08/want-speed-pass-by-value

Et une autre méthode (Méthode 2):

Définir deux corps, d'Abord const et un autre non 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;
};

L'utilisation de ces méthodes:

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.

}

Ma question laquelle de ces méthodes pour la mise en œuvre get/set est mieux?

Connaissez-vous une meilleure méthode?


Modifier:
Pour les réponses qui sont convaincus de la Méthode 1 est la meilleure, qu'en dites-vous dans la situation ci-dessous:

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

source d'informationauteur Amir Saniyan