0

我在教科书中看到了这一点,但这本书并没有解释它的实际作用,以及我为什么要这样做。这是类似于书中示例的内容:

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

我不能initial_capacity在实现中使用,我什至什么都不能实现,所以我很困惑这是为了什么?它是否以某种方式将容量设置为20?这是一个默认构造函数吗?

4

4 回答 4

11

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

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

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

MyClass a(10);

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

MyClass a;

容量将设置为 20。

于 2013-01-12T23:17:17.063 回答
4

这是一个带有默认参数的构造函数。这意味着您可以使用数字或不使用数字来调用它。如果您不带号码呼叫,则与您呼叫号码 20 相同。

于 2013-01-12T23:13:21.717 回答
2
MyClass(int initial_capacity = 20);

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

MyClass c(5);

MyClass c;

后面使用默认值。

于 2013-01-12T23:14:14.140 回答
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;
};

这种以分号开头的速记称为成员初始化列表。

但请注意,以这种方式调用它可能会给您带来麻烦,因为它会自动为您创建一个无参数构造函数。

于 2013-01-12T23:17:46.643 回答