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

1.4. Функции 31

Одно удобное применение перегрузки функции находится в написании процедур

та печать их аргументы. В частности функция, которая печатает целое число, отличалась бы от функции, которая печатает Пассажирскую структуру от Раздела 1.1.3, но оба могли использовать то же самое имя, печать, как показано в следующем примере.

недействительная печать (интервал x) //печатают целое число

суд <<x;

недействительная печать (константа Passenger& проход)//печатает Пассажира

суд <<pass.name <<«» <<pass.mealPref;

если (pass.isFreqFlyer)

суд <<«» <<pass.freqFlyerNo;

Когда функция печати используется, компилятор рассматривает типы фактической площади - gument и призывает соответствующую функцию, то есть, ту с подписью, самой близкой к фактическим аргументам.

Оператор, перегружающий

C ++ также позволяет перегружать операторов, такой как +, *, + =, и <<. Не удивительно, такое определение называют оператором, перегружающим. Предположим, что мы хотели бы написать тест на равенство на два Пассажирских объекта. Мы можем обозначить это естественным способом, перегрузив == оператор как показано ниже.

оператор bool == (константа Passenger& x, константа Passenger& y)

возвратите x.name == y.name

&& x.mealPref == y.mealPref

&& x.isFreqFlyer == y.isFreqFlyer && x.freqFlyerNo == y.freqFlyerNo;

Это определение подобно определению функции, но вместо имени функции мы используем «оператора ==». В целом, == заменен любым оператором, определяется. Для бинарных операторов у нас есть два аргумента, и для одноместных операторов мы имеем всего один.

Есть несколько полезных применений функции и оператора, перегружающего. Например, перегрузка == оператор позволяет нам естественно проверять на равенство двух объектов, p1 и p2, с выражением «p1 == p2». Другое полезное заявление оператора, перегружающего, для определения операторов входа и выхода для классов и структур. Вот то, как определить оператора продукции для нашей Пассажирской структуры. Тип ostream является типом потока продукции системы. Стандартная продукция, суд

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

из этого типа.

ostream& оператор <<(ostream&, константа Passenger& проход)

<<pass.name <<«» <<pass.mealPref;

если (pass.isFreqFlyer)

<<«» <<pass.freqFlyerNo;

возвратитесь;

Продукция в этом случае не очень симпатична, но мы могли легко изменить нашу продукцию

оператор, чтобы произвести более хорошее форматирование.

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

Оператор, перегружающий, является мощным механизмом, но им легко злоупотребляют. Это может быть очень запутывающим для кого-то читающего Вашу программу, чтобы найти, что знакомые операции такой как «+» и «/» были назначены новый и возможно запутывающие значения. Хорошие программисты обычно ограничивают оператора, перегружающего определенными операторами общего назначения такой как «<<» (продукция), «=» (назначение), «==» (равенство), «[]» (индекс - луг, для последовательностей).

Действующие функции

Очень короткие функции могут быть определены, чтобы быть «действующими». Это - намек к компилятору

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

действующая международная минута (интервал x, интервал y)возвращение (x <y? x: y);

1.5

Классы

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