Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Перегрузка функций и неопределенность



При перегрузке функций можно создать ситуацию, в которой компилятор не сможет выбрать между двумя или более перегруженными функция-ми. Неопределенные ситуации являются ошибками, и программа, содержащая неопределенности, компилироваться не будет.

Основная причина, вызывающая неопределенность, связана с автоматическим преобразованием типов в C++ когда аргументы, использованные при вызове функции, преобразуются к типу параметров функции. Например, если объявить:

void Func (double);

void Func (float);

то такое объявление перегруженных функций не является ошибочным. Ошибка может возникнуть при вызове функций:

void main()

{

Func(4.5); // вызов Func(double);

Func(10); // неопределенность!

}

В первом случае не возникает неопределенности, поскольку вещественное число 4.5 автоматически преобразуется в C++ к типу double. Во втором случае при передаче целого числа, возникает неопределенность, поскольку компилятор не может определить, приводить это число к типу float или типу double. Неопределенность здесь вызвана не перегрузкой функции, а вызовом этой функции с неопределенным типом аргумента. Ситуацию можно исправить, вызвав функцию следующим образом:

Func ((float)10);

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

void Func (int i, int j = 0);

void Func (int i);

main()

{

Func(10, 20); // вызов Func(int i, int j = 0);

Func (10); // неопределенность!

}

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





Дата публикования: 2015-07-22; Прочитано: 543 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...