Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

c++book1

.pdf
Скачиваний:
10
Добавлен:
17.02.2016
Размер:
2.12 Mб
Скачать

Учебник по C++. Скачан с сайта http://bizkit.land.ru . Самая полная коллекция в Сети.

спецификаторы_описания opt описатель_функции инициализатор_базового opt тело_функции

описатель_функции:

описатель ( список_описаний_параметров )

тело_функции: составной_оператор

инициализатор_базового:

:( список_инициализаторов_членов opt )

14.5Препроцессор

#define идентификатор строка_лексем

#define идентификатор( идентификатор,...,идентификатор ) строка лексем

#else

#endif

#if выражение

#ifdef идентификатор #ifndef идентификатор

#include "имя_файла" #include <имя_файла>

#line константа "имя_файла" #undef идентификатор

15. Отличия от C

15.1 Расширения

Типы параметров функции могут быть заданы (#8.4) и будут проверяться (#7.1). Могут выполняться преобразования типов (#

7.1).

Для выражений с числами с плавающей точкой может использоваться плавающая арифметика одинарной точности; #6.2.

Имена функций могут быть перегружены; #8.9.

Операции могут быть перегружены; 7.16, #8.5.11.

Функции могут быть inline-подставляемыми; #8.1.

301

Учебник по C++. Скачан с сайта http://bizkit.land.ru . Самая полная коллекция в Сети.

Объекты данных могут быть константными (const); #8.3.

Могут быть описаны объекты ссылочного типа; #8.4, #8.6.3

Операции new и delete обеспечивают свободное хранение в памяти, #7.2.

Классы могут обеспечивать сокрытие данных (#8.5.9), гарантированную инициализацию (#8.6.2), определяемые пользователем преобразвания (#8.5.6), и динамическое типизирование через использование виртуальных функций (#8.5.4).

Имя класса или перечисления является именем типа; #8.5.

Любой указатель может присваиваться void* без применеия приведения к типу;

#7.14.

Описание внутри блока является оператором; #9.14.

Можно описывать безымянные объединения; #8.5.13.

15.2 Сводка Несовместимостей

Большинство конструкций C допустимы в С++ без изменения их смысла. Исключения из этого следующие:

Программы, использующие одно из новых ключевых слов

class const delete friend inline

new operator overload public signed this virtual volatile

как идентификаторы, недопустимы.

Описание функции f(); означает, что f не получает параметров, в C же это значит, что f может получать параметр совершенно любого типа.

В C внешнее имя может определяться несколько раз, а в С+ + оно должно быть определено ровно один раз.

Имена классов в С++ находятся в том же пространстве, что и прочие имена, поэтому конструкции вроде

int s;

struct s (* /* ... */ *); f() (* s = 1; *)

302

Учебник по C++. Скачан с сайта http://bizkit.land.ru . Самая полная коллекция в Сети.

использоваться не могут. Однако, для разрешения большинства конфликтов может применяться явное использование class, struct, union, enum (#8.2) или :: (#7.1).

Например:

int s;

struct s (* /* ... */ *);

void f() (*int s; struct s a; *) void g() (* ::s = 1; *)

15.3 Анахронизмы

Изложенные здесь расширения могут предоставляться для того, чтобы упростить использование C программ как С++ программ. Обратите внимание, что каждая из этих возможностей содержит нежелательные аспекты. Предоставляющая их реализация должна также обеспечивать пользователю способ удостовериться, что они не встречаются в исходном файле.

Прежнее неопределенное имя может использоваться как имя функции в вызове. В этом случае имя будет неявно описано как функция, возвращающая int с типом параметра (...).

Ключевое слово void может использоваться для указания того, что функция не получает параметров, так что (void) эквивалентно ().

Могут использоваться программы, в которых используется синтаксис определения функций в C

старое_определение_функции:

спецификаторы_описания opt старый_описатель_функции список_описателей тело_функции

старый_описатель_функции:

описатель (* список_параметров *)

список_параметров: идентификатор

идентификатор , идентификатор

например,

max(a,b) (* return (a<b) ? b : a; *)

Если функция, описанная как эта, была ранее описана, тип ее параметра будет принят (...), то есть, непроверенный. Если она была описана, ее тип должен согласоваться с типом описания.

Вместо :: может использоваться точка для спецификации имени в определении функции члена. Например:

303

Учебник по C++. Скачан с сайта http://bizkit.land.ru . Самая полная коллекция в Сети.

int cl.fct() (* /* ... */ *)

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

_

304

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]