繁体   English   中英

使用自己的获取器/设置器的类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM