我在教科书中看到了这一点,但这本书没有解释它实际上做了什么,以及为什么我应该这样做。这与书中的例子类似:
class MyClass
{
public:
MyClass(int initial_capacity = 20);
private:
int capacity;
}
我不能在实现中使用initial_capacity
,我甚至无法实现任何东西,所以我很困惑这是为了什么?是否以某种方式将容量设置为20?这是一个默认的构造函数?
答案 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;
};
这个以分号开头的简写称为成员初始化列表。
请注意,以这种方式调用可能会让您遇到麻烦,因为它会自动为您创建无参数构造函数。