有两种实现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/