【问题标题】:C++ constructor every arguments have "=2.0" after?C ++构造函数每个参数后面都有“= 2.0”吗?
【发布时间】:2016-12-13 15:19:08
【问题描述】:

我从 C++ 开始,我发现了这个类的代码

class Box
{
  public:
  static int objectCount;
  // Constructor definition
  Box(double l=2.0, double b=2.0, double h=2.0)
  {
     cout <<"Constructor called." << endl;
     length = l;
     breadth = b;
     height = h;
     // Increase every time object is created
     objectCount++;
  }
  double Volume()
  {
     return length * breadth * height;
  }
private:
  double length;     // Length of a box
  double breadth;    // Breadth of a box
  double height;     // Height of a box
};

但是,我不明白为什么在每个参数之后都有“=2.0” 构造函数...有人可以解释一下吗?

【问题讨论】:

  • 如果您刚开始使用 C++,阅读初学者的 C++ 书籍可能更有效率。
  • 这些是默认的函数参数,你应该搜索一下
  • juanchopanza -> 我就是这么做的……

标签: c++ class constructor


【解决方案1】:

这是函数或方法参数的默认值。如果函数/方法调用未指定此参数,则函数/方法调用使用默认值。这有效地使参数可选,而不是必需的。可选参数必须跟在任何必需参数之后。必选参数不能跟在可选参数之后。

构造函数实际上是针对此问题的方法调用。这里的最终结果是这个类的构造函数的所有参数都是可选的。如果未指定,则默认为 2.0。

【讨论】:

    【解决方案2】:

    这些是默认参数。您询问的特定函数是类构造函数这一事实并不特殊; C++ 中的任何函数都可以有默认参数。

    当一个函数被调用时,如果你没有明确地写任何东西,默认参数就是传递给函数的参数。

    假设我们声明了一个函数

    foo(int m = 1)
    

    现在,如果我们拨打电话

    foo(9);
    

    九个被传递给函数。但是,我们也可以拨打电话

    foo();
    

    这一次,第一个被传递给函数。

    如果您不费心显式指定要传递给它的内容,默认参数是自动传递给函数的参数。如果您希望函数具有某种默认行为,则默认参数很方便,并且只有在极少数情况下,它才会做一些不同的事情。

    对于您正在使用的 Box 类,默认参数是出于某种愚蠢的原因而创建的。这样做是为了让程序员可以偷懒,创建一个盒子示例,然后玩弄它;所有这些都无需指定他们想要的盒子的初始长度、宽度和高度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 2012-09-02
      • 2015-07-16
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多