Объектно-ориентированное программирование на C++. Андрианова А.А - 20 стр.

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
Swap(array1, m, array2, n);
. . .
При разработке семейства перегруженных функций следует избегать
следующих ситуаций, когда нельзя однозначно определить, какую из
функций вызвать.
Функции не должны отличаться только типом возвращаемого
значения. Пусть имеются функции:
void f(int a) {. . .}
int f(int a) {. . .}
Тогда при следующем вызове
f(10);
возникает неоднозначная ситуация для компилятора, которая
приводит к ошибке.
Если две функции имеют параметры одного и того же типа, но в
одной из них параметры передаются по значению, а в другой – по
ссылке, вызов функции будет содержать неоднозначность,
поэтому компилятор рассматривает это как ошибку. Например,
имеются функции:
void f(int a) {. . .}
void f(int& a) {. . .}
Тогда при следующем вызове
int n = 19;
f(n);
возникает неоднозначность, поскольку синтаксис передачи
параметров при вызове функции по значению и по ссылке
одинаковый.
Ошибки не возникнет в случае передачи в качестве фактического
параметра константы, например,
f(10);
Тогда будет вызвана первая функция.
Если списки параметров двух функций отличаются только
наличием в одной из них дополнительных параметров, которые
20
                              Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
     Swap(array1, m, array2, n);
     .    .    .

    При разработке семейства перегруженных функций следует избегать
следующих ситуаций, когда нельзя однозначно определить, какую из
функций вызвать.
     • Функции не должны отличаться только типом возвращаемого
       значения. Пусть имеются функции:
          void f(int a) {.             .     .}
          int f(int a) {.              .     .}

     Тогда при следующем вызове

          f(10);

     возникает неоднозначная ситуация для компилятора, которая
     приводит к ошибке.
     • Если две функции имеют параметры одного и того же типа, но в
        одной из них параметры передаются по значению, а в другой – по
        ссылке, вызов функции будет содержать неоднозначность,
        поэтому компилятор рассматривает это как ошибку. Например,
        имеются функции:
          void f(int a) {.       .     .}
          void f(int& a) {.      .     .}

     Тогда при следующем вызове

          int n = 19;
          f(n);

     возникает неоднозначность, поскольку синтаксис передачи
     параметров при вызове функции по значению и по ссылке
     одинаковый.
     Ошибки не возникнет в случае передачи в качестве фактического
     параметра константы, например,
          f(10);

     Тогда будет вызвана первая функция.
     • Если списки параметров двух функций отличаются только
       наличием в одной из них дополнительных параметров, которые


20