我应该对类中的所有值使用 setValues 吗?

Posted

技术标签:

【中文标题】我应该对类中的所有值使用 setValues 吗?【英文标题】:Should I use setValues for all values in a class? 【发布时间】:2013-03-20 08:43:19 【问题描述】:

在面向对象编程中,使用构造函数或使用 setValues 之类的方法之间是否存在差异。我不应该使用 setValues 方法吗?

class Controller
public:
    Controller();
    Controller(int,int);
    setControllerValues(int,int);
private:
    int transactionValue;
    int transactionId;
;

【问题讨论】:

视情况而定。在构造对象构造函数时用于初始化某些(如果不是全部)成员。但是你不能对对象的构造后做任何事情。这是 setController 之类的成员函数派上用场的地方。 【参考方案1】:

您应该始终使用 member initializer list 来初始化您的班级成员。

注意我说的是initialize,意思是在构造的时候提供一个值。除非您这样做,否则这些成员具有 Indeterminate 值,直到您显式调用 set 方法以显式设置具有特定值的成员。

使用构造函数或使用setValues 之类的方法有区别吗?

是的,有区别。 C++ 为您提供了初始化 类成员的机会,这是通过成员初始化器列表。如果您不在成员初始化器列表中初始化成员,则成员保持未初始化状态,即它们具有 Indeterminate 值。人们永远不会希望成员的状态是不确定的。

当您使用 set 方法时,您实际上是在分配而不是初始化成员。两者是有区别的:

Cost Member Initialization = Object Construction 
Cost of Member Assignment = Object Construction + Assignment

【讨论】:

【参考方案2】:

这是一个非常广泛的问题,答案会因上下文而异。你总是想在构造时初始化你的值,看起来你想提供合理的默认值,你可以用 one 构造函数来做到这一点。这将节省您构造对象和随后设置值的时间。

如果您想在对象生命周期的后期设置您的值,您将需要“setter”。您可能更喜欢单独的“setter”而不是一个组合的 setter,以单独调整它们。

下面是一些示例代码:

class Controller
public:
    Controller(int value = SOME_SENSIBLE_DEFAULT,
               int id = SOME_OTHER_SENSIBLE_DEFAULT)
        :transactionValue(value)
        ,transactionId(id)
    
    

    void set_transaction_value(int value)
    
        transactionValue = value;
    

    void set_transaction_id(int id)
    
        transactionid = id;
    

private:
    int transactionValue;
    int transactionId;
;

【讨论】:

【参考方案3】:

构造函数是类中的一个方法,它在创建对象时被执行。通常,我们将初始化代码放在构造函数中。在类中编写构造函数非常简单,请看以下示例:

public class Test

    public Test()
    
        // Initialize code in the constructor.
    

构造函数不返回任何值。 不能在构造函数和析构函数上使用引用和指针,因为它们的地址不能被获取。 不能使用关键字 virtual 声明构造函数。 如果构造函数被定义为私有,我们不能创建该类的实例。

方法:

我们可以在方法中定义变量。这些变量的范围仅在方法内。 如果您声明一个公共变量,它将在所有方法中被访问。 方法可能包含/可能不包含返回类型。 方法可以在派生类中继承(注意方法应该是公共的)。

【讨论】:

以上是关于我应该对类中的所有值使用 setValues 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Java,类中的 For 循环

CoreData 在 Swift 中是必要的 setValue(_:forKey:) 吗?

对类的公共方法禁用“未使用”警告

php中::是什么意思?

将装饰器附加到类中的所有函数

如何对类中的私有成员变量进行赋值和访问