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

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

R.18.1 Расширения





В этом разделе перечисляются основные расширения языка С, введенныев С++.

R.18.1.1 Возможности С++, введенные в 1985 г.

Здесь перечисляются возможности, добавленные к С, версией языкаС++ 1985 г. Можно указывать типы формальных параметров функции ($$R.8.2.5), и онибудут проверяться ($$R.5.2.2). Будет происходить преобразованиетипа ($$R.5.2.2). Это есть и в ANSI C. В выражениях со значениями типа float вычисления могут проходитьс обычной точностью ($$R.3.6.1 и $$R.4.3). Это есть и в ANSI C. Можно перегружать имена функций; $$R.13. Можно перегружать операции; $$R.13.4 Возможна реализация вызова функций подстановкой; $$R.7.1.2. Можно описывать объекты, представляющие данные, со спецификацией const; $$R.7.1.6. Это есть и в ANSI C. Можно описывать типа ссылки; $$R.8.2.2 и $$R.8.4.3. Возможно управление свободной памятью с помощью операций new и delete; $$R.5.3.3 и $$R.5.3.4. Введены классы, которые позволяют: скрывать информацию ($$R.11), проводить инициализацию ($$R.12.1), осуществлять пользовательские преобразования типа ($$R.12.3) и работать с динамическими типами с помощью виртуальных функций ($$R.10.2). Имя класса или перечисления считается именем типа; $$R.9. Указатель на любой объект c типом, не являющимся const или volatile, можно присвоить указателю типа void*. Это есть и в ANSI C. Указатель на функцию можно присваивать указателю типа void*; $$R.4.6. Описание внутри блока считается оператором; $$R.6.7. Можно описывать безымянные объединения; $$R.9.5.

R.18.1.2 Возможности, добавленные в С++ после 1985 г.

Здесь перечисляются основные расширения С++ после 1985 г.: Класс может иметь более одного прямого базового класса(множественное наследование); $$R.10.1. Члены класса могут быть защищенными; $$R.11. Операции new и delete можно описывать в классе и перегружать; $$r.5.3.3, $$R.5.3.4, $$R.12.5. Это позволило определенный способуправления памятью для класса с помощью "присваивания указателюthis" отнести в раздел анахронизмов; $$R.18.3.3. Можно явно уничтожать объекты; $$R.12.4. Присваивания и инициализация для класса определены как присваивание иинициализация по членам; $$R.12.8. Служебное слово overload стало излишним и отнесено к разделуанахронизмов; $$R.18.3. Произвольные выражения разрешены в качестве инициализаторов статическихобъектов; $$R.8.4. Объекты, представляющие данные, могут быть volatile; $$R.7.1.6.Также и в ANSI C. Допустимы инициализаторы для статических членов класса; $$R.9.4. Функции-члены могут быть статическими; $$R.9.4. Функции-члены могут быть const или volatile; $$R.9.3.1. Можно явно указать связывание с подпрограммами на других языках;$$R.7.4. Можно перегружать операции ->, ->* и `; $$R.13.4. Классы могут быть абстрактными; $$R.10.3. Для пользовательских типов префиксные и постфиксные операцииразличаются. Шаблоны типов; $$R.14. Управление особыми ситуациями; $$R.15.

R.18.2 С++ и ANSI C

Вообще язык С++ обладает большими возможностями и налагает меньшеограничений, чем ANSI C, поэтому большинство конструкций ANSI Cявляются законными для С++, причем смысл их не меняется. Исключениясводится к следующему: Любая программа на ANSI C, использующая в качестве идентификаторовследующие служебные слова С++, не является программой на С++; $$R.2.4: asm catch class delete friend inline new operator private protected public template try this virtual throw Хотя это считается устаревшем в ANSI C, реализация С может налагать драконовские ограничения на длину идентификаторов; в реализациях С++ это недопустимо; $$R.2.3. В С++ функция должна быть описана прежде, чем ее можно вызвать; $$R.5.2.2. Описание f(); в С++ означает, что функция f не имеет параметров ($$R.8.2.5), а в С это означает, что f может иметь любое число параметров любого типа. Такое описание считается устаревшим в ANSI C. В ANSI C можно несколько раз описать без спецификации extern глобальный объект данных, в С++ возможно только одно его определение; $$R.3.3 В С++ класс не может иметь тоже имя, что и имя typedef, относящееся в той же области видимости к другому типу; $$R.9.1. В ANSI C операнд типа void* можно использовать в правой части присваивания, а также при инициализации переменной типа указателя на произвольный тип; в С++ это невозможно $$R.7.1.6. В ANSI C возможны команды переходов, обходящие инициализацию; в С++ это невозможно. В ANSI C по умолчанию глобальный объект типа const подлежит внешнему связыванию; для С++ это не так; $$R.3.3. Определения функций в "старом" стиле и вызовы неописанных функций считаются в С++ анахронизмами, которые не обязательно должны поддерживаться любой реализацией; $$R.18.3.1. В ANSI C они просто считаются устаревшими. В С++ структура (struct) образует область видимости ($$R.3.2); В ANSI C структура, перечисление или элемент перечисления, описанные в структуре поднимаются в область видимости самой структуры. Присваивание объекту типа перечисления значения, не принадлежащего перечислению, считается в С++ анахронизмом и не должно поддерживаться во всех реализациях; $$R.7.2. В ANSI C рекомендуется для таких присваиваний выдавать предупреждение. Строки, инициализирующие символьные массивы, не могут быть длиннее этих массивов; $$R.8.4.2. Тип символьной константы в С++ есть char ($$R.2.5.2) и int в ANSI C. Тип элемента перечисления есть тип этого перечисления в С++ ($$R.7.2) и тип int в ANSI C. Кроме того, стандарт ANSI для С допускает значительные различия вдопустимых реализациях языка, что может привести к еще большим расхожденияммежду реализациями С++ и С. В частности, в некоторых реализациях Смогут быть допустимы некоторые несовместимые описания. В С++ требуетсясовместимость даже для разных единиц трансляции; $$R.3.3.






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




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


Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...


Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...


Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Ученые, внесшие большой вклад в развитие науки биологии Краткая история развития биологии. Чарльз Дарвин (1809 -1882)- основной труд « О происхождении видов путем естественного отбора или Сохранение благоприятствующих пород в борьбе за жизнь»...

Этапы трансляции и их характеристика Трансляция (от лат. translatio — перевод) — процесс синтеза белка из аминокислот на матрице информационной (матричной) РНК (иРНК...

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

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

Что происходит при встрече с близнецовым пламенем   Если встреча с родственной душой может произойти достаточно спокойно – то встреча с близнецовым пламенем всегда подобна вспышке...

Реостаты и резисторы силовой цепи. Реостаты и резисторы силовой цепи. Резисторы и реостаты предназначены для ограничения тока в электрических цепях. В зависимости от назначения различают пусковые...

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