Синтаксис — Что это делает в конструкторе C ++?

Я видел это в учебнике, но книга не объясняет, что он на самом деле делает, и почему я должен это делать. Вот что-то похожее на пример в книге:

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

Я не могу использовать initial_capacity в реализации я даже ничего не могу реализовать, поэтому я не понимаю, для чего это нужно? Он устанавливает емкость на 20 как-то? Как это конструктор по умолчанию?

0

Решение

Возможно, здесь пропущена реализация конструктора. Например, если конструктор выглядит так:

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

Если вы создаете объект таким образом:

MyClass a(10);

емкость будет установлена ​​на 10.
С другой стороны, если вы создадите такой объект:

MyClass a;

емкость будет установлена ​​на 20.

11

Другие решения

Это конструктор с параметром по умолчанию. Это означает, что вы можете позвонить по номеру или без номера. Если вы звоните без номера, это так же, как если бы вы звонили с номером 20.

4

MyClass(int initial_capacity = 20);

Этот синтаксис предоставляет значение по умолчанию для initial_capacity параметр. Обратите внимание, что вы можете сделать это с параметрами для любой функции, а не только с конструкторами. Значения параметров по умолчанию полезны, потому что они позволяют

MyClass c(5);

а также

MyClass c;

В дальнейшем используется значение по умолчанию.

2

Он служит значением по умолчанию для 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;
};

Эта стенография, которой предшествует точка с запятой, называется списком инициализации члена.

Имейте в виду, однако, что такой вызов может привести к неприятностям, потому что он автоматически создаст для вас конструктор без параметров.

1
По вопросам рекламы [email protected]