Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Неоднозначность перегрузки

Читайте также:
  1. Конструктивные особенности перегрузки топлива реактора ВВЭР-1000.
  2. Миграция и пространственная неоднозначность
  3. Неоднозначность действия фактора на разные функции. 1 страница
  4. Неоднозначность действия фактора на разные функции. 10 страница
  5. Неоднозначность действия фактора на разные функции. 11 страница
  6. Неоднозначность действия фактора на разные функции. 12 страница
  7. Неоднозначность действия фактора на разные функции. 13 страница

Перегруженные функции выбираются по принципу наилучшего соответствия объявлений функций в текущей области видимости аргументам, предоставленным в вызове функции. Если подходящая функция найдена, эта функция и вызывается. Слово "подходящая" в этом контексте означает одно из следующего (в порядке ухудшения соответствия):

> найдено точное соответствие;

> выполнено тривиальное преобразование;

> выполнено преобразование целочисленных типов;

> существует стандартное преобразование к желаемому типу аргумента;

> существует определенное программистом преобразование (оператор преобразования или конструк­тор) к требуемому типу аргумента;

> были найдены аргументы, представленные многоточием.

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



Объектно-ориентированное программирование


Лекция 7


Перегрузка операторов



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

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

Функция с n аргументами по умолчанию, с точки зрения соответствия аргументов, рассматривается как совокупность из n+1 функций, каждая из которых отличается от предыдущей заданием одного допол­нительного аргумента. Многоточие (...) действует как произвольный символ: оно соответствует любому за­данному аргументу. Это может служить источником неоднозначности при выборе перегруженной функции.

Все сказанное выше относилось ко всем перегруженным функциям, безотносительно к тому, являют­ся ли они функциями-членами или нет. Рассмотрим теперь специфику перегруженных функций-членов.

Функции-члены класса рассматриваются различным образом в зависимости от того, объявлены ли они статическими или нет, потому что нестатические функции имеют неявный аргумент, через который передается указатель this. При определении функции, которая наилучшим образом соответствует вызову, для нестатических функций-членов рассматриваются только те перегруженные функции-члены, у которых скрытый указатель this соответствует типу объекта, который передан функции при вызове. В отличие от других аргументов при попытке установить соответствие аргумента с указателем this никакие преобразо­вания не производятся.

В отношении перегруженных конструкторов язык C++ предоставляет дополнительную возможность по управлению процессом поиска соответствия вызываемого конструктора. Ключевое слово explicit пред­ставляет собой спецификатор объявления, который может применяться только в объявлениях конструкто­ров (но не в определениях конструкторов вне класса).

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



Объектно-ориентированное программирование


Дата добавления: 2015-11-26; просмотров: 53 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.007 сек.)