C++ 使用自己的getter/setter的类

C++ 使用自己的getter/setter的类,c++,class,getter,C++,Class,Getter,假设我有以下课程: class MyClass { private: int Data; public: MyClass(int Init) { Data = Init; } int GetData() const { return Data; } }; 现在,假设我想添加一个检查数据是否等于零的方法。有两种方法可以实现这一点: bool DataIsZero() const {

假设我有以下课程:

class MyClass
{
    private:

    int Data;

    public:

    MyClass(int Init)
    {
        Data = Init;
    }

    int GetData() const
    {
        return Data;
    }
};
现在,假设我想添加一个检查数据是否等于零的方法。有两种方法可以实现这一点:

bool DataIsZero() const
{
    return Data == 0;
}
或:

哪个被认为是更好的做法?我可以看出仅仅使用变量本身可能会提高可读性,但是使用getter可能会使代码更易于维护。

我不太喜欢getter/setter,原因我在这里不赘述。还有其他问题。然而,既然您已经询问了它们,我的回答将假设我使用getter/setter;它不会访问所有可能的替代方案

出于您提到的维护原因,我会使用getter。事实上,抽象是将getter放在首位以及稍微更严格的访问控制的目的的一半

如果使用变量比使用getter更易读,那么您的getter函数名很差,应该重新考虑

另外,最好初始化成员,而不是事后在构造函数体中分配它们。事实上,您必须使用常量来执行此操作,因此您最好现在就开始并保持一致:

class MyClass
{
private:
    int Data;

public:

    MyClass(int Init) : Data(Init) {}

    int GetData() const {
        return Data;
    }
};
看看构造器是如何变化的。

我不太喜欢getter/setter,原因我在这里不赘述。还有其他问题。然而,既然您已经询问了它们,我的回答将假设我使用getter/setter;它不会访问所有可能的替代方案

出于您提到的维护原因,我会使用getter。事实上,抽象是将getter放在首位以及稍微更严格的访问控制的目的的一半

如果使用变量比使用getter更易读,那么您的getter函数名很差,应该重新考虑

另外,最好初始化成员,而不是事后在构造函数体中分配它们。事实上,您必须使用常量来执行此操作,因此您最好现在就开始并保持一致:

class MyClass
{
private:
    int Data;

public:

    MyClass(int Init) : Data(Init) {}

    int GetData() const {
        return Data;
    }
};

查看构造函数是如何更改的。

您应该使用getter,因为如果您的类在getter中移动到更复杂的逻辑,那么您将不会受到更改的影响。但是,如果您的类提供了一个公共getter,我会质疑创建此方法的逻辑。

您应该使用getter,因为如果您的类在getter中移动到一个更复杂的逻辑,那么您将不会受到更改的影响。但是,如果您的类提供了一个公共getter,我会质疑创建此方法的逻辑。

这取决于具体情况

前者对于简单类就足够了

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

这取决于具体情况

前者对于简单类就足够了


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

关于你的第二句话,虽然我不一定不同意你的观点,但有两件事值得注意:一是OP的示例可能是一个简化的、人为的代码示例;实际用例可能不那么做作;b std::string::empty非常好用,尽管将std::string::length与0进行比较非常容易。因此,有时有一个理由让成员函数看起来有点毫无意义。关于你的第二句话,虽然我不一定不同意你的观点,但有两件事值得注意:一是OP的示例可能是一个简化的、人为的代码示例;实际用例可能不那么做作;b std::string::empty非常好用,尽管将std::string::length与0进行比较非常容易。因此,有时候,让成员函数变得毫无意义是有道理的。风格上的一点是,成员函数应该是小写的。大写通常是为静态成员保留的。风格上的一点是,您的成员函数应该是小写的。大小写通常为静态成员保留。应该使用getter,因为当获取值的代码更改时,所有直接访问成员的方法也必须更改。维护噩梦。此外,许多编译器会内联简单的getter和setter,因此工作由打字员程序员来完成。@ThomasMatthews:或者,换句话说,出于您提到的维护原因,我会使用getter应该使用getter,因为当获取值的代码更改时,直接访问成员的所有方法也必须更改。维护噩梦。此外,许多编译器会内联简单的getter和setter,因此工作由打字员程序员来完成。@ThomasMatthews:或者,换句话说,出于您提到的维护原因,我会使用getter