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

1.5. Классы 35

секции, и фактически, возможно переключиться назад и вперед между ними. Большинство

C ++ руководства стиля рекомендуют, чтобы общественные участники были представлены сначала, так как это элементы класса, которые относятся к программисту, который хочет использовать класс. Мы иногда нарушаем это соглашение в этой книге, особенно когда мы хотим подчеркнуть членов парламента, не занимающих официального поста.

Членские функции

Давайте возвратимся к Пассажирской структуре, которая была введена ранее в Секунду -

tion 1.1.3, но на сей раз мы определяем его, используя структуру класса. Мы обеспечиваем те же самые членские переменные как ранее, но они - теперь члены парламента, не занимающие официального поста. К этому мы добавляем несколько членских функций. Для этого короткого примера мы обеспечиваем всего несколько из многих возможных членских функций. Первая членская функция - конструктор. Его работа состоит в том, чтобы гарантировать, что каждый случай класса должным образом инициализирован. Заметьте, что у конструктора нет типа возвращения. Членская функция isFrequentFlyer проверяет, является ли пассажир частым flyer, и членская функция makeFrequent-Летчик делает пассажира частым flyer и назначает частое flyer число. Это - только частичное определение, и были опущены много членских функций. Как обычно, мы используем «//..». указать на опущенный кодекс.

Пассажир класса //Пассажир (как класс)

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

Пассажир (); //конструктор bool isFrequentFlyer () константа; //действительно ли это - частый flyer?

//сделайте это частым flyer

пустота makeFrequentFlyer (константа string& newFreqFlyerNo);//... другие членские функции

частный:

последовательность имя; //первенство s инженер er имя

MealType mealPref; //предпочтение еды

b o ol isFreqFlyer; //частый flyer? последовательность freqFlyerNo; //частое flyer число

;

Членские функции класса могут быть помещены в две главных категории: accessor func-

tions, которые только читают данные о классе и обновляют функции, которые могут изменить данные о классе. Ключевое слово «константа» указывает, что членская функция isFrequentFlyer является accessor. Это сообщает пользователю класса, что эта функция не изменит содержание объекта. Это также позволяет компилятору фиксировать потенциальную ошибку, должен мы непреднамеренно пытаться изменить любые членские переменные класса.

Мы объявили две членских функции, но мы все еще должны определить их. Членские функции могут или быть определены внутри или снаружи тела класса. Большинство C ++ руководства стиля рекомендует определить все членские функции вне класса, в

36

Глава 1. C ++ заказ Учебника для начинающих представить чистый общественный интерфейс в определении класса. Как мы видели выше во Встречном примере, когда членская функция определена вне тела класса, необходимо определить, какому классу это принадлежит, который сделан, предшествуя имени функции с названием класса спецификатора обзора:: членское имя.

Пассажир bool:: isFrequentFlyer () константа

возвратите isFreqFlyer;

недействительный Пассажир:: makeFrequentFlyer (константа string& newFreqFlyerNo)

isFreqFlyer = верный;

freqFlyerNo = newFreqFlyerNo;

Заметьте, что, когда мы в пределах тела членской функции, участнику vari-ables (такому как isFreqFlyer и freqFlyerNo) дают независимо от паритета - ticular объект. Эти функции будут призваны на особый Пассажирский объект. Например, позвольте проходу быть переменной Пассажира типа. Мы можем призвать эти общественные членские функции на проход, используя того же самого членского оператора выбора, которого мы начали со структур как показано ниже. Только к общественным участникам можно получить доступ таким образом.

Пассажирский проход; //проход - Пассажир//...

если (! pass.isFrequentFlyer ()) //не уже частый flyer?

pass.makeFrequentFlyer («392953»); //частота прохода набора flyer число

pass.name = «Джо Блоу»; //НЕЗАКОННЫЙ! имя частное

Определения функции в классе

В вышеупомянутых примерах мы показали членские функции, определяемые за пределами тела класса. Мы можем также определить участников в пределах тела класса. Когда членская функция определена в пределах класса, она собрана в линии (вспомните Раздел 1.4.2). Как с действующими функциями, в классе функционируйте, определения должны быть зарезервированы для коротких функций, которые не включают петли или условные предложения. Вот пример того, как isFrequentFlyer членская функция была бы определена из класса.

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

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

// . . .

bool isFrequentFlyer () константавозвращает isFreqFlyer;

// . . .

;