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



在面向对象编程中,使用构造函数或使用setValues之类的方法有区别吗?我不应该使用setValues方法吗?

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

您应该始终使用成员初始化列表初始化您的类成员。

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

使用构造函数和使用setValues类方法有区别吗

是的,有区别。c++提供了初始化类成员的机会,这是通过成员初始化列表实现的。如果你没有在成员初始化列表中初始化成员,成员将保持未初始化状态,即它们具有不确定的值。人们永远不会希望成员的状态是不确定的。

使用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.
    }
}
  • 构造函数不返回任何值
  • 不能在构造函数和析构函数上使用引用和指针,因为它们的地址不能被获取。
  • 构造函数不能用关键字virtual声明。
  • 如果构造函数定义为private,则不能创建该类的实例。

方法:

    在方法中,我们可以定义变量。这些变量的作用域只能在方法中。如果你声明了一个公共变量,它将被所有的方法访问。
  • 方法可以/也可以不包含返回类型。
  • 方法可以在派生类中继承(注意方法应该是public)。

相关内容

  • 没有找到相关文章

最新更新