使用他们自己的Getters / Setters的类

时间:2011-01-14 13:48:17

标签: c++ class getter

假设我有以下课程:

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可能会使代码更容易维护。

3 个答案:

答案 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)

这取决于。

前者足以用于简单的课程。

如果方法是虚拟的,后者隐藏了实现并且可以支持多态性。