Главная страница
Навигация по странице:

  • типа с плавающей запятой

  • конфликт имен

  • тип возврата функции

  • Алгоритм и структура данных. 1 Базовый процедурноориентированный алгоритмический язык


    Скачать 1.16 Mb.
    Название1 Базовый процедурноориентированный алгоритмический язык
    АнкорАлгоритм и структура данных
    Дата03.11.2022
    Размер1.16 Mb.
    Формат файлаdocx
    Имя файлаАлгоритм и структура данных.docx
    ТипДокументы
    #768957
    страница4 из 11
    1   2   3   4   5   6   7   8   9   10   11

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


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

    1

    2

    3

    4

    int subtract(int a, int b)

    {

        return a - b;

    }

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

    Одним из способов решения этой проблемы является определение двух функций с разными именами и параметрами:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    int subtractInteger(int a, int b)

    {

        return a - b;

    }

    double subtractDouble(double a, double b)

    {

        return a - b;

    }

    Но есть и лучшее решение — перегрузка функции. Мы можем просто объявить еще одну функцию subtract(), которая принимает параметры типа double:

    1

    2

    3

    4

    double subtract(double a, double b)

    {

        return a - b;

    }

    Теперь у нас есть две версии функции subtract():

    1

    2

    int subtract(int a, int b); // целочисленная версия

    double subtract(double a, double b); // версия типа с плавающей запятой

    Может показаться, что произойдет конфликт имен, но это не так. Компилятор может определить сам, какую версию subtract() следует вызывать на основе аргументов, используемых в вызове функции. Если параметрами будут переменные типа int, то C++ понимает, что мы хотим вызвать subtract(int, int). Если же мы предоставим два значения типа с плавающей запятой, то C++ поймет, что мы хотим вызвать subtract(double, double). Фактически, мы можем определить столько перегруженных функций subtract(), сколько хотим, до тех пор, пока каждая из них будет иметь свои (уникальные) параметры.

    Следовательно, можно определить функцию subtract() и с большим количеством параметров:

    1

    2

    3

    4

    int subtract(int a, int b, int c)

    {

        return a - b - c;

    }

    Хотя здесь subtract() имеет 3 параметра вместо 2, это не является ошибкой, поскольку эти параметры отличаются от параметров других версий subtract().

    Типы возврата в перегрузке функций



    Обратите внимание, тип возврата функции НЕ учитывается при перегрузке функции. Предположим, что вы хотите написать функцию, которая возвращает рандомное число, но вам нужна одна версия, которая возвращает значение типа int, и вторая — которая возвращает значение типа double. У вас может возникнуть соблазн сделать следующее:

    1

    2

    int getRandomValue();

    double getRandomValue();

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



    1   2   3   4   5   6   7   8   9   10   11


    написать администратору сайта