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