这在C ++构造函数中有什么作用?

时间:2013-01-12 23:12:09

标签: c++ syntax constructor default-constructor

我在教科书中看到了这一点,但这本书没有解释它实际上做了什么,以及为什么我应该这样做。这与书中的例子类似:

 class MyClass
 {
      public:
           MyClass(int initial_capacity = 20);
      private:
           int capacity;
 }

我不能在实现中使用initial_capacity,我甚至无法实现任何东西,所以我很困惑这是为了什么?是否以某种方式将容量设置为20?这是一个默认的构造函数?

4 个答案:

答案 0 :(得分:11)

可能错过了构造函数的实现。例如,如果构造函数看起来像这样:

MyClass(int initial_capacity = 20) {
     capacity = initial_capacity;
}

如果以这种方式创建对象:

MyClass a(10);

容量将设置为10。 另一方面,如果你要创建这样的对象:

MyClass a;

容量将设置为20。

答案 1 :(得分:4)

这是一个带有默认参数的构造函数。这意味着您可以使用数字或没有数字来呼叫它。如果您在没有号码的情况下拨打电话,则与拨打号码20的情况相同。

答案 2 :(得分:2)

MyClass(int initial_capacity = 20);

此语法为initial_capacity参数提供默认值。请注意,您可以使用任何函数的参数执行此操作,而不仅仅使用构造函数。默认参数值很有用,因为它允许您同时执行这两个操作

MyClass c(5);

MyClass c;

在后面,使用默认值。

答案 3 :(得分:1)

如果用户选择不输入值,它将作为initial_capacity的默认值。所以本质上它取代了2个构造函数:一个取整数MyClass(int);,另一个不取任何参数MyClass();,这将是20。

假设您打算使用它来设置容量值,有两种方法可以使用它。 。

在您的.cpp文件中

#include "<...>.h"

MyClass::MyClass(int initial_capacity)
{
    capacity = initial_capacity;
}

或者您可以直接从.h文件中选择

class MyClass
{
     public:
          MyClass(int initial_capacity = 20) 
               : capacity(initial_capacity) // member initialization list
          {}
     private:
          int capacity;
};

这个以分号开头的简写称为成员初始化列表。

请注意,以这种方式调用可能会让您遇到麻烦,因为它会自动为您创建无参数构造函数。