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

Перегрузка функций. Перегрузка - это практика предоставления более чем одного определения для данного

Читайте также:
  1. V Производные обратных тригонометрических функций
  2. Алгоритм работы библиотечных функций malloc/free языка С
  3. Аналитическое выравнивание рядов динамики. Типы развития и соответствующие им уравнения функций.
  4. В. Расстройства интеграции психических функций
  5. Вегетативные рефлексы и центры регуляции вегетативных функций
  6. Возрастание и убывание функций.
  7. Возрастание и убывание функций.

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

int func (int); int func (int&);

приведет к ошибке, так как с точки зрения перегрузки они считаются одинаковыми.

Аргументы функции, относящиеся к некоторому типу, модифицированные const или volatile, не рас­сматриваются как отличные от базового типа с точки зрения перегрузки.

Указатели на const - и volatile -объекты также не рассматриваются как отличные от указателей на ба­зовый тип с точки зрения перегрузки.

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

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



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


Лекция 7


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



> перегрузка функций с совпадающими списками аргументов на основе лишь типа возвращаемых ими значений недопустима;

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

> все enum -типы данных рассматриваются как различные и могут использоваться для различения пе­регруженных функций;

> типы "массив (чего-то)" и "указатель (на что-то)" рассматриваются как идентичные с точки зрения перегрузки.

> typedef -определения не влияют на механизм перегрузки, так как они не вводят новых типов данных, а определяют лишь синонимы для существующих типов.

Например, следующее определение

typedef char* PSTR;

не позволит компилятору рассматривать две приведенные ниже функции

void SetVal (char* sz); void SetVal (PSTR sz);

как различные. Поэтому их одновременное объявление в классе вызовет ошибку.

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

void SetVal (char S [ ]); void SetVal (char S [ ] [4]);

При объявлении перегруженных функций компилятор отслеживает объявления, данные в пределах одной и той же области видимости. Поэтому, если в производном классе объявлена функция с тем же именем, что и функция в базовом классе, функция из производного класса скрывает функцию базового класса вместо того, чтобы осуществлять перегрузку (так как их области видимости различны). Короче го­воря, нельзя путать переопределение функций с перегрузкой. Точно также компилятор отслеживает и дру­гие области видимости. Поэтому, так как функция, объявленная в области видимости файла, находится не в той же области видимости, что и функция, объявленная в блоке, даже если они имеют одинаковые име­на, компилятор не рассматривает их как перегруженные. Локально объявленная функция просто скрывает глобально объявленную.


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



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