Я видел это в учебнике, но книга не объясняет, что он на самом деле делает, и почему я должен это делать. Вот что-то похожее на пример в книге:
class MyClass
{
public:
MyClass(int initial_capacity = 20);
private:
int capacity;
}
Я не могу использовать initial_capacity
в реализации я даже ничего не могу реализовать, поэтому я не понимаю, для чего это нужно? Он устанавливает емкость на 20 как-то? Как это конструктор по умолчанию?
Возможно, здесь пропущена реализация конструктора. Например, если конструктор выглядит так:
MyClass(int initial_capacity = 20) {
capacity = initial_capacity;
}
Если вы создаете объект таким образом:
MyClass a(10);
емкость будет установлена на 10.
С другой стороны, если вы создадите такой объект:
MyClass a;
емкость будет установлена на 20.
Это конструктор с параметром по умолчанию. Это означает, что вы можете позвонить по номеру или без номера. Если вы звоните без номера, это так же, как если бы вы звонили с номером 20.
MyClass(int initial_capacity = 20);
Этот синтаксис предоставляет значение по умолчанию для initial_capacity
параметр. Обратите внимание, что вы можете сделать это с параметрами для любой функции, а не только с конструкторами. Значения параметров по умолчанию полезны, потому что они позволяют
MyClass c(5);
а также
MyClass c;
В дальнейшем используется значение по умолчанию.
Он служит значением по умолчанию для initial_capacity
если пользователь решает не вводить значение. Таким образом, по сути, он занимает место двух конструкторов: один, который принимает целое число 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;
};
Эта стенография, которой предшествует точка с запятой, называется списком инициализации члена.
Имейте в виду, однако, что такой вызов может привести к неприятностям, потому что он автоматически создаст для вас конструктор без параметров.