在面向对象编程中,使用构造函数或使用 setValues 之类的方法之间是否存在差异。我不应该使用 setValues 方法吗?
class Controller{
public:
Controller();
Controller(int,int);
setControllerValues(int,int);
private:
int transactionValue;
int transactionId;
};
在面向对象编程中,使用构造函数或使用 setValues 之类的方法之间是否存在差异。我不应该使用 setValues 方法吗?
class Controller{
public:
Controller();
Controller(int,int);
setControllerValues(int,int);
private:
int transactionValue;
int transactionId;
};
您应该始终使用成员初始化器列表来初始化您的类成员。
请注意,我说的是initialize,这意味着在构造时提供一个值。除非您这样做,否则这些成员具有 Indeterminate 值,直到您显式调用该set
方法以显式设置具有特定值的成员。
setValues
使用构造函数或使用类似方法之间是否存在差异。
是,有一点不同。C++ 为您提供了初始化类成员的机会,这是通过成员初始化器列表。如果您不在成员初始化器列表中初始化成员,则成员保持未初始化状态,即它们具有 Indeterminate 值。人们永远不会希望成员的状态是不确定的。
当您使用 set 方法时,您实际上是在分配而不是初始化成员。两者有区别:
Cost Member Initialization = Object Construction
Cost of Member Assignment = Object Construction + Assignment
这是一个非常广泛的问题,答案会因上下文而异。你总是想在构造时初始化你的值,看起来你想提供合理的默认值,你可以用一个构造函数来做到这一点。这将节省您构建对象并随后设置值的时间。
如果您想在对象生命周期的后期设置您的值,您将需要“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;
};
构造函数是类中的一个方法,它在创建对象时被执行。通常,我们将初始化代码放在构造函数中。在类中编写构造函数非常简单,请看以下示例:
public class Test
{
public Test()
{
// Initialize code in the constructor.
}
}
方法: