Студопедия Главная Случайная страница Обратная связь

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

R.13 Перегрузка





Говорят, что имя перегружено, если для него задано несколько различныхописаний функций в одной области видимости. При использовании именивыбор правильной функции производится путем сопоставления типовформальных параметров с типами фактических параметров, например: double abs(double); int abs(int); abs(1); // вызов abs(int) abs(1.0); // вызов abs(double) Поскольку при любом типе T и для самого T, для и T& допустимо одно ито же множество инициализирующих значений, функции, типы параметровкоторых различаются только использованием, или не использованиемссылки, не могут иметь одинаковые имена, например: int f(int i) { //... } int f(int& r) // ошибка: типы функций { // недостаточно различны //... } Аналогично, поскольку для любом типе T для самого T, const T иvolatile T допустимо одно и то же множество инициализирующихзначений, функции, типы параметров которых отличаются толькоуказанной спецификацией, не могут иметь одинаковые имена. Однако,различить const T&, volatile T& и просто T& можно, поэтому допустимыопределения функций с одним именем, которые различаются тольков указанном отношении. Аналогично, допустимы определения функцийс одним именем, типы параметров которых различаются только кактипы вида const T*, volatile T* и просто T*. Не могут иметь одинаковые имена функции, которые отличаютсятолько типом возвращаемого значения. Не могут иметь одинаковые имена функции-члены, одна из которыхстатическая, а другая нет ($$R.9.4). С помощью конструкции typedef не создаются новые типы,а только определяется синоним типа ($$R.7.1.3), поэтому функции,которые отличаются только за счет использования типов, определенных спомощью typedef, не могут иметь одинаковые имена. Приведемпример: typedef int Int; void f(int i) { /*... */ } void f(Int i) { /*... */ } // ошибка: переопределение f С другой стороны все перечисления считаются разными типами, и с ихпомощью можно различить перегруженные функции, например: enum E { a }; void f(int i) { /*... */ } void f(E i) { /*... */ } Типы параметров, которые различаются только тем, что в одномиспользуется указатель *, а в другом массив [], считаются идентичными.Напомним, что для типа параметра важны только второй и последующиеиндексы многомерного массива ($$R.8.2.4). Подтвердим сказанноепримером: f(char*); f(char[]); // идентично f(char*); f(char[7]); // идентично f(char*); f(char[9]); // идентично f(char*); g(char(*)[10]); g(char[5][10]); // идентично g(char(*)[10]); g(char[7][10]); // идентично g(char(*)[10]); g(char(*)[20]); // отлично от g(char(*)[10]);







Дата добавления: 2015-09-04; просмотров: 327. Нарушение авторских прав; Мы поможем в написании вашей работы!




Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...


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


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...


Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Йодометрия. Характеристика метода Метод йодометрии основан на ОВ-реакциях, связанных с превращением I2 в ионы I- и обратно...

Броматометрия и бромометрия Броматометрический метод основан на окислении вос­становителей броматом калия в кислой среде...

Метод Фольгарда (роданометрия или тиоцианатометрия) Метод Фольгарда основан на применении в качестве осадителя титрованного раствора, содержащего роданид-ионы SCN...

Гидравлический расчёт трубопроводов Пример 3.4. Вентиляционная труба d=0,1м (100 мм) имеет длину l=100 м. Определить давление, которое должен развивать вентилятор, если расход воздуха, подаваемый по трубе, . Давление на выходе . Местных сопротивлений по пути не имеется. Температура...

Огоньки» в основной период В основной период смены могут проводиться три вида «огоньков»: «огонек-анализ», тематический «огонек» и «конфликтный» огонек...

Упражнение Джеффа. Это список вопросов или утверждений, отвечая на которые участник может раскрыть свой внутренний мир перед другими участниками и узнать о других участниках больше...

Studopedia.info - Студопедия - 2014-2025 год . (0.013 сек.) русская версия | украинская версия