Среда, 15.08.2018, 06:36
Discovery
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Форма входа
Категории раздела
PHP [1]
Уроки по PHP для начинающих
C++ [18]
Статьи посвященные С++
XML [2]
Статьи по XML
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
     Каталог статей
    -->
    Главная » Статьи » Программирование » C++

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

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

    Наверное, каждый, кто хоть раз в жизни устанавливал самостоятельно программы на компьютер, читал на экране следующую фразу: «Для завершения установки необходимо перезагрузить компьютер». Здесь все понятно. Нажимаешь «Пуск», затем «Выключение». Затем, когда появиться окошко с надписью «Выключить компьютер» выбираешь «Перезагрузка». Все остальное компьютер сделает сам. Но перегрузка функции звучит как-то подозрительно. Где здесь кнопка «Пуск» и все остальное? И вообще, зачем нужно перегружать эти самые функции?

    Все очень просто. Две функцию в С++ могут иметь одно и то же имя, но отличаться количеством параметров, типами параметров порядком в котором они записаны (имя функции, количество и тип параметров иногда называют сигнатурой функции). Вот простой пример использования перегруженных функций:

    #include <iostream>
    #include <windows.h>
    using namespace std;

    int sum(int num1, int num2);

    int sum(int num1, int num2, int num3);

    int main()
    {
        int num1, num2, num3, result;

        cout << "Введите первое число: ";
        cin >> num1;
        cout << "Введите второе число: ";
        cin >> num2;

        cout << "\n\n";

        result = sum(num1, num2);

        cout << "Сумма двух чисел равна: "
                      << result << "\n\n";
        cout << "Введите третье число: ";
        cin >> num3;

        cout << "\n\n";

        result = sum(num1, num2, num3);
        cout << "Сумма трех чисел равна: " << result;

        cout << "\n\n";
        system("PAUSE");
        return 0;
    }

    int sum(int num1, int num2)
    {
        int result;

        result = num1 + num2;

        return result;
    }

    int sum(int num1, int num2, int num3)
    {
        int result;

        result = num1 + num2 + num3;

        return result;
    }

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

    Теперь пример программы, в которой две функции имеют два параметра, но тип данных у этих параметров не совпадает. При первом вызове функции мы сначала ей передаем переменную типа int, а затем переменную типа double. При втором вызове функции мы сначала передаем ей переменную типа double, а затем переменную типа int:

    #include <iostream>
    #include <windows.h>
    using namespace std;

    void test(int my_int, double my_double);

    void test(double my_double, int my_int);

    int main()
    {
        int my_int;
        double my_double;

        cout << "Вызываем функцию test c "
               << "параметрами int, double\n\n";

        test(my_int, my_double);

        cout << "Вызываем функцию test c "
               << "параметрами double, int\n\n";

        test(my_double, my_int);

        cout << "\n\n";
        system("PAUSE");
    }

    void test(int my_int, double my_double)
    {
        cout << "Вызвана функция test c "
               << "параметрами int, double\n\n";
    }

    void test(double my_double, int my_int)
    {
        cout << "Вызвана функция test c "
               << "параметрами double, int\n\n";
    }

    Перегруженные функции не могут отличаться друг от друга только возвращаемыми значениями, а так же именами переменных. Если мы, например, объявим функцию void test(int a, int b) и функцию int test(int a, int c), то компилятор выдаст ошибку.То же самое произойдет в случае объявления функций int test(int a, int b) и int test(int b, int a). Или int test(int a) и int test(int b).

    Категория: C++ | Добавил: stranger140569 (23.10.2013)
    Просмотров: 790 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *:
    Copyright MyCorp © 2018
    Конструктор сайтов - uCoz