 |
<список-объявления-арг>
список-объявления-арг, ...
<список-объявления-арг>...(только для С++)
список-объявления-арг:
объявление-аргументов
список-объявления-арг объявление-аргументов
объявление-аргументов:
спецификаторы-объявления декларатор
спецификаторы-объявления декларатор = выражение (только
для С++)
спецификаторы-объявления <абстрактный-декларатор>
спецификаторы-объявления <абстрактный-декларатор> =вы-
ражение (только для С++)
определение-функции:
<спецификаторы-объявления> декларатор <инициализатор>
тело-функции
тело-функции:
составной оператор
инициализатор:
= выражение
= (список-инициализаторов)
(список-выражений) (только для С++)
список-инициализаторов:
выражение
список-инициализаторов , выражение
(список-инициализаторов<,>)
-----------------------------------------------------------
Внешние объявления и определения
Спецификаторы класса памяти auto и registerво внешнем
объявлении появиться не могут (см. "Единицы трансляции").
Для каждого идентификатора в единице трансляции, объявленной
с внешним типомкомпоновки, может существовать не более одно-
го внешнего определения.
Внешнее определение - это внешнее объявление, которое
также определяет объект или функцию;таким образом, оно также
распределяет память. Если идентификатор, объявленный с внеш-
ним типомкомпоновки, используется в выражении (не являющемся
частью операции sizeof), то во всей программе должно иметь-
сяв точности одно внешнее определение данного идентификато-
ра.
Turbo C++ позволяет затем переобъявление внешних имен,
таких как массивы, структуры и объединения, добавляя инфор-
мацию к ранее выполненным объявлениям. Например,
int a[] // нет размера
struct mystruct; // только тег, без объявления компонентов
...
- 38 -
int a[3] = [1, 2, 3]; // задание размера и инициализация
struct mystruct (*
int i, j;
*); // добавление деклараторов компонентов
Объявления классов Turbo C++ (только С++) Таблица 1.12
-----------------------------------------------------------
спецификатор-класса:
заголовок-класса (<список-компонентов>)
заголовок-класса:
ключ-класса <идентификатор> <базовый-спецификатор>
ключ-класса имя-класса <базовый-спецификатор>
список-компонентов:
объявление-компонента <список-компонентов>
спецификатор-доступа : <список-компонентов>
объявление-компонента:
<спецификаторы-объявления><список-декларатора-компонентов>;
определение-функции <;>
квалифицированное-имя;
список-декларатора-компонентов:
декларатор-компонента
список-декларатора-компонентов, декларатор-компонента
декларатор-компонента:
декларатор
<идентификатор> : выражение-типа-константы
pure-спецификатор:
=0
базовый-спецификатор:
:базовый-список
базовый-список:
базовый-спецификатор
базовый-список, базовый-спецификатор
базовый-спецификатор:
имя-класса
virtual <спецификатор-доступа> имя-класса
спецификатор-доступа Юvirtual> имя-класса
спецификатор-доступа:
private
protected
public
имя-функции-преобразования:
operator имя-типа-преобразования
имя-типа-преобразования:
спецификация-типа <операция-указателя>
инициализатор-конструктора:
: список-инициализаторов-памяти
список-инициализаторов-памяти:
инициализатор-памяти
инициализатор-памяти, список-инициализаторов-памяти
инициализатор-памяти:
имя-класса (<список-аргументов>)
идентификатор (<список-аргументов>)
- 39 -
имя-функции-операции:
operator операция
операция: одно из
new delete sizeof
+ - * /% ^
& \! != <>
+= -= *= /=%= ^=
&= \!= << >>>>= <<=
== != <= >=&& \!\!
++ -- , ->*-> ()
[] .*
-----------------------------------------------------------
Спецификаторы типа
Спецификатор типа с одним или более опциональным моди-
фикатором используется для задания типа объявляемого иденти-
фикатора:
int i; // объявление i как целого со знаком
unsigned char ch1, ch2; // объявление двух символьных
без знака
По устоявшейся традиции, если спецификатор типа опущен,
то по умолчанию назначается тип signed int (или, что эквива-
лентно, int). Однако, в С++ встречаются ситуации, когда от-
сутствие спецификатора типа ведет к синтаксической неодноз-
начности, поэтому в практике работы с С++ используется явный
ввод всех спецификаторов типа int.
Таксономия типа
Существует четыре базовые категории типа: void, scalar,
function и aggregate. Типы scalar и aggregate могут далее
подразделяться следующим образом:
- Scalar: арифметический, перечислимый, указатель и в С
++ ссылки
- Aggregate: массив, структура, объединение и в С++ класс
Типы делятся на фундаментальные и производные. К фунда-
ментальным относятся: void, char, int, float и double сов-
местно с short, long, signed, а также некоторые варианты с
ними unsigned. Производные типы включают в себя указатели и
ссылки на другие типы,массивы других типов, типы функций,
типы классов, структуры и объединения.
С++: Объект класса может, например, содержать некоторое
число объектов различных типов вместе сфункции манипуляции
этими объектами, плюс механизм контроля доступа и наследова-
ния от других классов.
Задав не-пустойтип type (с некоторыми предосторожностя-
ми), можно объявлять производные типы следующим образом:
- 40 -
 |
|