SlideShare a Scribd company logo
1 of 5
Download to read offline
Программирование на языке C++
Лекция 4
Перегрузка
Александр Смаль
1/5
Перегрузка функций
В отличие от C в C++ можно определить несколько функций с
одинаковым именем, но разными параметрами.
double square(double d) { return d * d; }
int square(int i) { return i * i; }
При вызове функции по имени будет произведен поиск
наиболее подходящей функции:
int a = square (4); // square(int)
double b = square (3.14); // square(double)
double c = square (5); // square(int)
int d = square(b); // square(double)
float e = square (2.71f); // square(double)
2/5
Перегрузка методов
struct Vector2D {
Vector2D(double x, double y) : x(x), y(y) {}
Vector2D mult(double d) const
{ return Vector2D(x * d, y * d); }
double mult(Vector2D const& p) const
{ return x * p.x + y * p.y; }
double x, y;
};
Vector2D p(1, 2);
Vector2D q = p.mult (10); // (10, 20)
double r = p.mult(q); // 50
3/5
Перегрузка при наследовании
struct File {
void write(char const * s);
...
};
struct FormattedFile : File {
void write(int i);
void write(double d);
using File :: write;
...
};
FormattedFile f;
f.write (4);
f.write("Hello");
4/5
Правила перегрузки
1. Если есть точное совпадение, то используется оно.
2. Если нет функции, которая могла бы подойти с учётом
преобразований, выдаётся ошибка.
3. Есть функции, подходящие с учётом преобразований:
3.1 Расширение типов.
char, signed char, short → int
unsigned char, unsigned short → int/unsigned int
float → double
3.2 Стандартные преобразования (числа, указатели).
3.3 Пользовательские преобразования.
В случае нескольких параметров нужно, чтобы выбранная
функция была строго лучше остальных.
NB: перегрузка выполняется на этапе компиляции. 5/5

More Related Content

What's hot

6.3 Специализация шаблонов
6.3 Специализация шаблонов6.3 Специализация шаблонов
6.3 Специализация шаблонов
DEVTYPE
 
Cpp/cli types
Cpp/cli typesCpp/cli types
Cpp/cli types
mcroitor
 
19 pascal urok_3
19 pascal urok_319 pascal urok_3
19 pascal urok_3
Ann Eres
 
лабораторная работа №5
лабораторная работа №5лабораторная работа №5
лабораторная работа №5
Zhanna Kazakova
 
Functional Programming in Python
Functional Programming in PythonFunctional Programming in Python
Functional Programming in Python
dudarev
 

What's hot (20)

4.3 Виртуальные методы
4.3 Виртуальные методы4.3 Виртуальные методы
4.3 Виртуальные методы
 
3.8 Класс массива
3.8 Класс массива3.8 Класс массива
3.8 Класс массива
 
2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод
 
6.4 Ещё о шаблонах
6.4 Ещё о шаблонах6.4 Ещё о шаблонах
6.4 Ещё о шаблонах
 
6.3 Специализация шаблонов
6.3 Специализация шаблонов6.3 Специализация шаблонов
6.3 Специализация шаблонов
 
3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания3.7 Конструктор копирования и оператор присваивания
3.7 Конструктор копирования и оператор присваивания
 
3.4 Объекты и классы
3.4 Объекты и классы3.4 Объекты и классы
3.4 Объекты и классы
 
3.5 Модификаторы доступа
3.5 Модификаторы доступа3.5 Модификаторы доступа
3.5 Модификаторы доступа
 
2.7 Многомерные массивы
2.7 Многомерные массивы2.7 Многомерные массивы
2.7 Многомерные массивы
 
лекция 3
лекция 3лекция 3
лекция 3
 
Cpp/cli types
Cpp/cli typesCpp/cli types
Cpp/cli types
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 
2.6 Динамическая память
2.6 Динамическая память2.6 Динамическая память
2.6 Динамическая память
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
 
5.5 Ключевое слово friend
5.5 Ключевое слово friend5.5 Ключевое слово friend
5.5 Ключевое слово friend
 
19 pascal urok_3
19 pascal urok_319 pascal urok_3
19 pascal urok_3
 
лабораторная работа №5
лабораторная работа №5лабораторная работа №5
лабораторная работа №5
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_cast
 
Functional Programming in Python
Functional Programming in PythonFunctional Programming in Python
Functional Programming in Python
 
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
 

Viewers also liked

Viewers also liked (13)

3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java3. Объекты, классы и пакеты в Java
3. Объекты, классы и пакеты в Java
 
2.3 Указатели и массивы
2.3 Указатели и массивы2.3 Указатели и массивы
2.3 Указатели и массивы
 
6.1 Шаблоны классов
6.1 Шаблоны классов6.1 Шаблоны классов
6.1 Шаблоны классов
 
4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка
 
2.4 Использование указателей
2.4 Использование указателей2.4 Использование указателей
2.4 Использование указателей
 
2.5 Ссылки
2.5 Ссылки2.5 Ссылки
2.5 Ссылки
 
6. Generics. Collections. Streams
6. Generics. Collections. Streams6. Generics. Collections. Streams
6. Generics. Collections. Streams
 
1. Введение в Java
1. Введение в Java1. Введение в Java
1. Введение в Java
 
3.6 Константность
3.6 Константность3.6 Константность
3.6 Константность
 
4.1 Наследование
4.1 Наследование4.1 Наследование
4.1 Наследование
 
5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе
 
4.6 Особенности наследования в C++
4.6 Особенности наследования в C++4.6 Особенности наследования в C++
4.6 Особенности наследования в C++
 
4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование
 

Similar to 4.2 Перегрузка

лабораторная работа №4
лабораторная работа №4лабораторная работа №4
лабораторная работа №4
Zhanna Kazakova
 
Лекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовЛекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графов
Mikhail Kurnosov
 
C++ осень 2012 лекция 11
C++ осень 2012 лекция 11C++ осень 2012 лекция 11
C++ осень 2012 лекция 11
Technopark
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2
Technopark
 

Similar to 4.2 Перегрузка (20)

Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий Леванов
 
Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование
 
лабораторная работа №4
лабораторная работа №4лабораторная работа №4
лабораторная работа №4
 
Лекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графовЛекция 8: Графы. Обходы графов
Лекция 8: Графы. Обходы графов
 
Основы Python. Функции
Основы Python. ФункцииОсновы Python. Функции
Основы Python. Функции
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11
 
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий Леванов
 
Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2Введение в синтаксис C++, часть 2
Введение в синтаксис C++, часть 2
 
Введение в синтаксис C++, часть 1
Введение в синтаксис C++, часть 1Введение в синтаксис C++, часть 1
Введение в синтаксис C++, часть 1
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
 
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
 
C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
 
C++ осень 2012 лекция 11
C++ осень 2012 лекция 11C++ осень 2012 лекция 11
C++ осень 2012 лекция 11
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
 
Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур
 Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур  Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур
Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 

More from DEVTYPE

D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применение
DEVTYPE
 

More from DEVTYPE (20)

Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебре
 
1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистика
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform Continuity
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change Problem
 
Recurrences
RecurrencesRecurrences
Recurrences
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применение
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ
 
Скорость роста функций
Скорость роста функцийСкорость роста функций
Скорость роста функций
 
Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of Functions
 
Кучи
КучиКучи
Кучи
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование Хаффмана
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введение
 
Разбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиРазбор задач по дискретной вероятности
Разбор задач по дискретной вероятности
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делитель
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа Фибоначчи
 
О-символика
О-символикаО-символика
О-символика
 

4.2 Перегрузка

  • 1. Программирование на языке C++ Лекция 4 Перегрузка Александр Смаль 1/5
  • 2. Перегрузка функций В отличие от C в C++ можно определить несколько функций с одинаковым именем, но разными параметрами. double square(double d) { return d * d; } int square(int i) { return i * i; } При вызове функции по имени будет произведен поиск наиболее подходящей функции: int a = square (4); // square(int) double b = square (3.14); // square(double) double c = square (5); // square(int) int d = square(b); // square(double) float e = square (2.71f); // square(double) 2/5
  • 3. Перегрузка методов struct Vector2D { Vector2D(double x, double y) : x(x), y(y) {} Vector2D mult(double d) const { return Vector2D(x * d, y * d); } double mult(Vector2D const& p) const { return x * p.x + y * p.y; } double x, y; }; Vector2D p(1, 2); Vector2D q = p.mult (10); // (10, 20) double r = p.mult(q); // 50 3/5
  • 4. Перегрузка при наследовании struct File { void write(char const * s); ... }; struct FormattedFile : File { void write(int i); void write(double d); using File :: write; ... }; FormattedFile f; f.write (4); f.write("Hello"); 4/5
  • 5. Правила перегрузки 1. Если есть точное совпадение, то используется оно. 2. Если нет функции, которая могла бы подойти с учётом преобразований, выдаётся ошибка. 3. Есть функции, подходящие с учётом преобразований: 3.1 Расширение типов. char, signed char, short → int unsigned char, unsigned short → int/unsigned int float → double 3.2 Стандартные преобразования (числа, указатели). 3.3 Пользовательские преобразования. В случае нескольких параметров нужно, чтобы выбранная функция была строго лучше остальных. NB: перегрузка выполняется на этапе компиляции. 5/5