getter setter 函数和构造函数有什么区别?我认为因为 getter setter 和构造函数的目标都是初始化类中的私有成员变量。我有点困惑,因为他们都在做同样的事情。是否存在每个使用的特定情况,或者它们可以互换使用?
4 回答
构造函数用于初始化实例变量,即赋予它们第一个(初始)值,而setter方法用于稍后更改它们。Getter用于检索它们拥有的当前值。
在计算机科学中,mutator 方法是一种用于控制变量更改的方法。它们也被广泛称为 setter 方法。通常,setter 伴随着 getter(也称为访问器),它返回私有成员变量的值。
mutator 方法最常用于面向对象的编程中,符合封装的原则。根据这一原则,将类的成员变量设为私有以隐藏和保护它们不受其他代码的影响,并且只能通过公共成员函数(mutator方法)进行修改,该函数将所需的新值作为参数,可选地验证它,并修改私有成员变量。
并且,将其与构造函数的定义进行比较:
在面向对象的编程中,类中的构造函数(有时缩写为 ctor)是一种特殊类型的子例程,调用它来创建对象。它准备新对象以供使用,通常接受构造函数用来设置所需成员变量的参数。
构造函数类似于实例方法,但它与方法的不同之处在于它没有显式的返回类型,它不是隐式继承的,而且它通常对范围修饰符有不同的规则。构造函数通常与声明类同名。他们的任务是初始化对象的数据成员并建立类的不变量,如果不变量无效则失败。正确编写的构造函数使生成的对象处于有效状态。不可变对象必须在构造函数中初始化。
因此,使用这些定义,我们可以推断出以下内容:
- 构造函数初始化对象的数据成员(很像设置器)——即将对象的数据成员设置为某个初始值——但这仅在实例化时完成。
- Setter 用于在对象的生命周期内随时修改数据成员的值。
- Getter 用于在对象的生命周期内随时访问数据成员的值。
实例的构造函数只被调用一次。可以在对象生命周期的任何时候调用 Getter/setter。构造函数用于初始化对象,而 setter 用于为其更动态的成员维护对象状态(而 getter 将用于访问该状态)。
构造函数初始化您正在创建的实例。
当一个对象(类的实例)被删除时,析构函数被调用。
Getter 用于获取属性的值。
Setter 用于设置属性的值。
Example *ex = new Example(); // Constructor is called
char *ch = ex->getSomeProperty(); // Getter is called
ex->setSomeProperty("parameter"); // Setter is called with a passed argument
delete ex; // Destructor is called