Есть два метода для реализации get/set.
Способ 1:
Определить get и установить отдельно.
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
И еще один метод (метод 2):
Определите два тела получения: первый 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 лучше?
Знаете ли вы лучший метод?
Edit: Для ответов, которые верят, что метод 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.
}