[英]Classes Using their Own Getters/Setters
假设我有以下课程:
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可以使代码更易于维护。
我真的不喜欢使用getter / setter,因为我不会在这里讨论。 他们在其他问题中涉及。 但是,由于您已经询问过它们,因此我的答案将假定我使用getter / setter。 它不会访问所有可能的替代方法。
出于您提到的维护原因,我会使用吸气剂。 确实,抽象是将吸气剂放在首位的目的的一半(以及稍微更严格的访问控制)。
如果使用变量比使用getter更清晰,则您的getter函数名称较差,应重新考虑。
顺便说一句,最好初始化成员,而不要在事后将它们分配到构造函数中。 实际上,您必须使用常量来执行此操作,因此您最好现在就开始并保持一致:
class MyClass
{
private:
int Data;
public:
MyClass(int Init) : Data(Init) {}
int GetData() const {
return Data;
}
};
查看构造函数的变化方式。
您应该使用吸气剂,因为如果您的班级在吸气剂中转移到更复杂的逻辑,那么您将免受更改的影响。 但是,如果您的班级提供了一个公共获取者,我会质疑创建此方法的逻辑。
这取决于。
前者足以应付简单的课程。
如果该方法是虚拟的,则后者隐藏了实现并可以支持多态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.