Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции / Лекции 1-2.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
142.98 Кб
Скачать

Int main () {

Boo boo1 = {7, 8 }; // список инициализаторов

Boo boo2 {9, 10}; // uniform-инициализация (C++11)

return 0;

}

Однако, как только мы сделаем какие-либо переменные-члены класса закрытыми, то больше не сможем инициализировать их напрямую.

Если вы не можете напрямую обращаться к переменной (потому что она закрыта), то вы и не должны иметь возможность напрямую её инициализировать.

Как тогда инициализировать класс с закрытыми переменными-членами?

Использовать конструкторы.

Конструктор — это особый тип метода класса, который автоматически вызывается при создании объекта этого класса.

Конструкторы обычно используются

- для инициализации переменных-членов класса значениями, которые предоставлены по умолчанию/пользователем, или

- для выполнения любых шагов настройки, необходимых для используемого класса (например, открыть определенный файл или базу данных).

В отличие от обычных методов, конструкторы имеют определенные правила их именования:

- конструкторы всегда должны иметь то же имя, что и класс (учитываются верхний и нижний регистры);

    - конструкторы не имеют типа возврата (даже void).

Обратите внимание, конструкторы предназначены только для выполнения инициализации (той или иной).

Не следует пытаться вызывать конструктор для повторной инициализации существующего объекта!

То есть, явно нельзя вызывать конструктор!

Хотя это может и скомпилироваться без ошибок, результаты при этом могут получиться неожиданные (компилятор создаст временный объект, а затем удалит его).

Инициализация переменных в С++

При определении переменной мы можем присвоить ей значение в момент выделения ей памяти. Это называется инициализацией переменной.

Существует 3 способа инициализации переменной в С++.

Способ №1: Копирующая инициализация (или «инициализация копированием») с помощью знака равенства =:

int x = 5; // копирующая инициализация

Способ №2: Прямая инициализация с помощью круглых скобок ():

int x(5); // прямая инициализация

Способ №3: Uniform инициализация с помощью фигурных скобок {}:

int x{5}; // uniform инициализация

Прямая или копирующая инициализация работают не со всеми типами данных (например, вы не сможете использовать эти способы для инициализации списка значений).

В попытке обеспечить единый механизм инициализации, который будет работать со всеми типами данных, в C++11 добавили uniform-инициализацию.

В uniform-инициализации есть одно важное преимущество: вы не сможете присвоить переменной значение, которое не поддерживает её тип данных — компилятор выдаст предупреждение или сообщение об ошибке. Например:

int x{4.3}; // ошибка компилятора

Однако, если вы уже создали переменную и хотите присвоить ей значение (не в момент определения), то будет работать только присваивание:

int x;

x = 4;

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

int a = 1, b = 2;

int c (3), d(4);

int e{5}, f{6}, g{};

Где лучше определять и инициализировать переменные?

Сейчас это неактуально. Современные компиляторы не требуют, чтобы все переменные обязательно были объявлены в самом верху функции.

В языке С++ приоритетным является определение, а также инициализация переменных как можно ближе к их первому использованию.