正如标题所说:创建函数来访问类变量是不错的做法?
我已经看过很多代码,它们可以执行以下操作:
class MyClass {
public:
void setx(int a);
void sety(int b);
int read_x;
int read_y;
private:
int x;
int y;
};
void MyClass::setx(int a) {
x=a;
}
void MyClass::sety(int b) {
y = b;
}
int MyClass::read_x() {
return x;
{
int MyClass::read_y() {
return y;
}
因此,不是直接访问变量(MyClass.x),而是使用函数来读取和设置变量值等。
这是标准还是良好做法?
答案 0 :(得分:4)
是的,出于多种原因,访问者功能被优先用于指导成员访问。它们提供了一个独特的接入点,更易于跟踪和调试。
例如,您可以在MyClass.x
中设置单个断点,而不是在更改MyClass::setX()
的代码中的任何位置设置断点。
但是,虽然比直接成员访问更好,但访问者方法并非没有缺点,如果被滥用。有关详情,请访问Getters and Setters are bad OO design?
答案 1 :(得分:2)
而不是直接访问变量?绝对。创建编程接口层会将您与这些内部变量本身的实现细节分离。然后,您可以为自己提供额外的灵活性,例如创建有问题的类的模拟实现(用于测试),创建代理类(用于记录等装饰功能)。
我警告不要为你可能不需要的东西自动创建它们。但这是一个不同的问题。
就像在健身房锻炼一样:它回馈的次数超过了它;)
答案 2 :(得分:1)
是的,他们还可以,但是我也会说你应该保持你的课程比你说的那么小,而不是那么你最终不会得到主要是getter和setter的类型。
通常,一个类拥有一个(理想情况下是单一的)状态(如果需要可以获得)并且具有理想情况下应该保持私有的实现。
答案 3 :(得分:1)
这很重要,因为它将类的接口与基础数据模型分开。您经常会看到基本代码,例如您发布的示例,起初,很多内容似乎都是不必要的复杂问题。但是,它提供了一个(自我文档)框架,可以在不破坏通过定义的接口访问类对象的代码的情况下更改对象的实现。