💀
Второй курс РПО
C++
C++
  • Свойства и типы
  • Блок-схемы
  • Visual Studio
  • Первый проект
  • Вывод данных
  • Типы данных
  • Переменные и Константы
  • Ввод данных
  • Литералы
  • Задание [ ! ]
  • Первая практическая
  • Операторы в языке программирования
  • Арифметические операции в C++
  • Применение арифметических операций
  • Практическая работа №2
  • Практическая работа №3
  • Логические операции
    • Справочник по командам
  • Практическая работа №4
  • Практическая работа №5
  • Массивы
    • Спец. задание
  • ⚙️Справочник по C++
  • Домашнее задание №1
  • Функции
    • Более краткая версия
  • Практическая работа №6
  • Указатели
  • Задание на экране 12.12
  • Введение в строки
  • Перегрузка функций в C++
  • Функции класса
  • Полезные штуки
  • Работа с классами в C++
  • Дружественные классы в C++
Powered by GitBook
On this page
  • Условия для перегрузки
  • Примеры
  • Особенности перегрузки
  • Заключение

Перегрузка функций в C++

26.12.2024

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


Условия для перегрузки

Функции с одинаковым именем должны отличаться:

  • По количеству параметров.

  • По типам параметров.

Различие только в возвращаемом типе недостаточно для перегрузки.


Примеры

1. Перегрузка по типу параметров

#include <iostream>

int sum(int, int);
double sum(double, double);

int main() {
    int result1 = sum(3, 6); // вызов int sum(int, int)
    std::cout << result1 << std::endl; // 9

    double result2 = sum(3.3, 6.6); // вызов double sum(double, double)
    std::cout << result2 << std::endl; // 9.9
}

int sum(int a, int b) {
    return a + b;
}

double sum(double a, double b) {
    return a + b;
}

Здесь две функции sum работают с разными типами аргументов: int и double. Компилятор выбирает нужный вариант на основе типов переданных значений.

2. Перегрузка по количеству параметров

#include <iostream>

int sum(int, int);
int sum(int, int, int);

int main() {
    int result1 = sum(3, 6); // вызов int sum(int, int)
    std::cout << result1 << std::endl; // 9

    int result2 = sum(3, 6, 2); // вызов int sum(int, int, int)
    std::cout << result2 << std::endl; // 11
}

int sum(int a, int b) {
    return a + b;
}

int sum(int a, int b, int c) {
    return a + b + c;
}

В этом примере количество аргументов определяет, какая из функций будет вызвана.


Особенности перегрузки

1. Параметры-ссылки

Функции с параметрами data_type и data_type& не считаются различными:

void print(int);
void print(int&); // Ошибка: перегрузка невозможна

2. Константные параметры

Для значений const игнорируется:

void print(int);
void print(const int); // Ошибка: перегрузка невозможна

Но для ссылок и указателей const имеет значение:

#include <iostream>

int square(const int*);
int square(int*);

int main() {
    const int n1 = 2;
    int n2 = 3;

    int square_n1 = square(&n1);
    int square_n2 = square(&n2);

    std::cout << "square(n1): " << square_n1 << "\tn1: " << n1 << std::endl;
    std::cout << "square(n2): " << square_n2 << "\tn2: " << n2 << std::endl;
}

int square(const int* num) {
    return (*num) * (*num);
}

int square(int* num) {
    *num = (*num) * (*num); // Изменяем значение по адресу
    return *num;
}

В этом случае функции различаются: одна работает с const int*, другая с int*.


Заключение

Перегрузка функций делает код более гибким и удобным, позволяя использовать одно имя для функций с разным поведением. Основные правила:

  1. Функции должны отличаться количеством или типами параметров.

  2. Возвращаемый тип не влияет на перегрузку.

  3. Учитывайте особенности ссылок и const.

Используйте перегрузку, чтобы улучшить читаемость и структурированность кода.

PreviousВведение в строкиNextФункции класса

Last updated 5 months ago