实例是否应该使用设置器/获取器来访问自己的私人数据成员?[英] Should instances use setters/getters for accessing their own private data members?

问题描述

从每个介绍性编程课程开始,我们被教导使用访问者和设置器,而不是公开课程的内部工作.学生将学习稍后的练习的重点,但是现在我知道这种做法(a)阻止实施成为合同出口API的一部分,(b)改进封装和数据隐藏,并且(c)允许a每当设置或访问变量时,保证是否应该发生某些操作(增加计数器,记录某些东西等).

从实例本身中使用Getter/Setter?例如,

class A {
  private:
    int number = 43;
  public:
    int getNumber();
    void setNumber(int);
};

当涉及到它时,这真的很重要吗?我们可以遵循任何指导方针,还是在这种情况下有任何书写?当我编程时,我想到了这个问题,但是我从未见过有人讨论有关实例本身的访问者/突变器.

谢谢!

推荐答案

从该实例中调用Getter或Setter的适当用例是您需要利用Getter或Setter提供的副作用验证或计算.如果您不需要,为什么从对象内部复制此类功能?

纯粹主义者会将副作用,验证或计算重构为自己的私人方法,然后在内部和getter/setter上调用 .这样,您就不会将公共接口与任何内部实施详细信息耦合.

其他推荐答案

它将归结为一致性.恕我直言,一旦您创建了访问者方法,即使从封闭类中,也没有直接访问实际变量的业务.

通过使用同样在课程本身中公开暴露的相同的设置器和获取器,只要访问成员变量,就可以保证公共行为.有一个点可以通过读取和修改进行:无论是公开还是内部.

.

考虑一下,如果有一天您对称为myVar的特定成员整数介绍零检查怎么办?然后,只有使用SetNumber的代码才能具有该功能.全类中使用变量的所有线都必须单独修改.

其他推荐答案

Getters/Setter用于封装.使用Getters/Setter访问自己的成员的类是极端封装!答案不是必需的,没有任何好处.

当其中有一些逻辑时,您可以使用Getter/Setter,并且您想始终应用它 - 即使是私人会员访问.一个这样的示例是由getter合成的派生值.无论是另一个班级还是同一班 - 他们必须经过getter.

本文地址:https://www.itbaoku.cn/post/978548.html