假设我有以下课程:
class MyClass
{
private:
int Data;
public:
MyClass(int Init)
{
Data = Init;
}
int GetData() const
{
return Data;
}
};
现在,假设我要添加一个检查Data
是否等于零的方法。有两种方法可以实现这一目标:
bool DataIsZero() const
{
return Data == 0;
}
或者:
bool DataIsZero() const
{
return GetData() == 0;
}
哪种做法更好?我可以看到使用变量本身如何提高可读性,但使用getter可能会使代码更容易维护。
答案 0 :(得分:4)
我不喜欢getter / setter,原因是我不会进入这里。其他问题涉及到它们。但是,既然你已经询问过它们,我的答案就是假设我使用了getter / setter;它不会访问所有可能的替代方案。
我会使用getter,因为你提到的维护原因。实际上,抽象是将吸气剂放在第一位的目的的一半(以及稍微更严格的访问控制)。
如果使用变量比使用getter更易读,那么你的getter函数名称很差,应该重新考虑。
顺便说一句,最好初始化成员,而不是事后在构造函数体中分配它们。事实上,你有用常量来做这件事,所以你现在也可以从现在开始并保持一致:
class MyClass
{
private:
int Data;
public:
MyClass(int Init) : Data(Init) {}
int GetData() const {
return Data;
}
};
了解构造函数的更改方式。
答案 1 :(得分:2)
你应该使用getter,因为如果你的类在getter中移动到更复杂的逻辑,那么你将不受改变的影响。但是,如果你的类提供了一个公共getter,我会质疑创建这个方法的逻辑。
答案 2 :(得分:1)
这取决于。
前者足以用于简单的课程。
如果方法是虚拟的,后者隐藏了实现并且可以支持多态性。