Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

1.5. Классы 37

1.5.2 Конструкторы и печи для сжигания отходов производства

Вышеупомянутая декларация прохода переменной класса страдает от недостатка, что мы не инициализировали ни одного из его участников классов. Важный аспект классов - способность инициализировать членские данные класса. Конструктор - специальная членская функция, задача которой состоит в том, чтобы выполнить такую инициализацию. Это призвано, когда новый объект класса появляется. Есть аналогичная членская функция печи для сжигания отходов производства, которая вызвана, когда объект класса выходит из существования.

Конструкторы

Членское имя функции конструктора совпадает с классом, и у этого нет типа возвращения. Поскольку объекты могут быть инициализированы по-разному, естественно определить различных конструкторов и полагаться на перегрузку функции, чтобы определить, какой нужно назвать.

Возвращаясь к нашему Пассажирскому классу, давайте определим трех конструкторов. У первого довода «против» - structor нет аргументов. Такого конструктора называют конструктором по умолчанию, так как это используется в отсутствие любой информации об инициализации. Второму конструктору дают ценности членских переменных, чтобы инициализировать. Третьему конструктору дают Пассажирскую ссылку, с которой можно скопировать информацию. Это называют конструктором копии.

Пассажир класса

частный:

//... общественность:

Пассажир (); //конструктор по умолчанию

Пассажир (константа string& nm, член парламента MealType, константа string& fn = «НИ ОДИН»); Пассажир (константа Passenger& проход);//копируют конструктора//...

;

Смотрите тщательно на второго конструктора. Примечание fn = «НИ ОДИН» не указывает на это

аргумент в пользу fn - аргумент по умолчанию. Таким образом, фактический аргумент не должен быть дан, и если так, стоимость, «НИ ОДИН» не используется вместо этого. Если недавно созданный пассажир не частый flyer, мы просто опускаем этот аргумент. Конструктор проверяет на эту специальную стоимость и настраивает вещи соответственно. Аргументам по умолчанию можно назначить любая юридическая стоимость и можно использовать больше чем для одного аргумента. Часто полезно определить значения по умолчанию для всех аргументов конструктора. Такой конструктор - конструктор по умолчанию, потому что это называют, если никакие аргументы не даны. Аргументы по умолчанию могут использоваться с любой функцией (не просто конструкторы). Связанные определения конструктора показывают ниже. Обратите внимание на то, что аргумент по умолчанию подан

38 Глава 1. C ++ учебник для начинающих

декларация, но не в определении.

Пассажир:: Пассажир ()

назовите = «-N O N M E -»;

mealPref = НИКАКАЯ ПРИСТАВКА; isFreqFlyer = ложный; freqFlyerNo = «НИ ОДИН»;

//конструктор по умолчанию

//конструктор, данный членские ценности

Пассажир:: Пассажир (константа string& nm, член парламента MealType, константа string& fn)

назовите = nm;

mealPref = член парламента;

isFreqFlyer = (fn! = «НИ ОДИН»); freqFlyerNo = fn;

//верный, только если данный fn

//конструктор копии

Пассажир:: Пассажир (константа Passenger& проход)

назовите = pass.name;

mealPref = pass.mealPref; isFreqFlyer = pass.isFreqFlyer; freqFlyerNo = pass.freqFlyerNo;

Вот некоторые примеры того, как конструкторы выше могут быть призваны к de - прекрасные Пассажирские объекты. Обратите внимание на то, что в случаях p3 и pp2 мы опустили частое flyer число.

Пассажирский p1; //конструктор по умолчанию

Пассажирский p2 («Джон Смит», ВЕГЕТАРИАНЕЦ, 293145);//2-й конструктор

Пассажирский p3 («Покахонтас», РЕГУЛЯРНЫЙ); //не частый flyer Пассажирский p4 (p3); //скопированный с p3 Пассажирского p5 = p2; //скопированный от p2 Пассажира* pp1 = новый Пассажир; //конструктор по умолчанию

Пассажир* pp2 = новый Пассажир («Джо Блоу», НИКАКАЯ ПРИСТАВКА);//2-й constr.

Пассажирский pa[20]; //использует конструктора по умолчанию

Хотя они выглядят по-другому, декларации для p4 и p5 оба называют конструктора копии. Эти декларации используют в своих интересах немного письменного волшебства, которое C ++ обеспечивает, чтобы заставить конструкторов копии больше походить на определения типа, которые мы видели до сих пор. Декларации для pp1 и pp2 создают новые пассажирские объекты из свободного магазина и возвращают указатель на каждого. Декларация pa объявляет множество Пассажира. Отдельные члены множества всегда инициализируются от конструктора по умолчанию.