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