РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
692 of 815 menu

Список инициализации

Список инициализации - это специальный синтаксис конструктора, который позволяет инициализировать поля класса и базовые классы до выполнения тела конструктора. Он записывается после списка параметров конструктора через двоеточие. В списке инициализации каждое поле указывается через запятую в формате поле(значение). Такой способ инициализации часто эффективнее присваивания в теле конструктора, а для константных полей и ссылок - единственно возможный.

Синтаксис

ClassName(params) : field1(value1), field2(value2), baseClass(args) { // тело конструктора }

Пример

Давайте создадим класс Point с двумя полями и инициализируем их через список инициализации:

#include <iostream> using namespace std; class Point { private: int x; int y; public: Point(int x, int y) : x(x), y(y) { } void print() { cout << x << " " << y << endl; } }; int main() { Point p(1, 2); p.print(); return 0; }

Результат выполнения кода:

1 2

Пример

Список инициализации обязателен для константных полей и полей-ссылок. Давайте создадим класс с константным полем и ссылкой:

#include <iostream> using namespace std; class Holder { private: const int id; int& ref; public: Holder(int id, int& ref) : id(id), ref(ref) { } void print() { cout << id << " " << ref << endl; } }; int main() { int value = 42; Holder h(7, value); h.print(); return 0; }

Результат выполнения кода:

7 42

Пример

Порядок инициализации полей определяется порядком их объявления в классе, а не порядком в списке инициализации. Давайте убедимся в этом:

#include <iostream> using namespace std; class Order { private: int a; int b; public: Order(int val) : b(val), a(b + 1) { } void print() { cout << a << " " << b << endl; } }; int main() { Order o(5); o.print(); return 0; }

Результат выполнения кода:

6 5

Смотрите также

  • ключевое слово ctor-init,
    которое описывает список инициализации конструктора
  • конструктор constructor,
    который создает объект класса
  • делегирующий конструктор delegating-ctor,
    который вызывает другой конструктор того же класса
  • ключевое слово explicit,
    которое запрещает неявные преобразования
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить