рефераты

рефераты

 
 
рефераты рефераты

Меню

Реферат: Turbo C++ Programer`s guide рефераты

Следующие операции являются специфичными для C++:

:: .*   ->*

За исключением операций [], () и ?:, служащих для записи выражений в скобках, многосимвольные операции рассматриваются в качестве одной лексемы. Лексема одной и той же операции может иметьнесколько интерпретаций, в зависимости от контекста. Например,

A * B              Умножение

*ptr               Обращение по ссылке

A & B             Поразрядное И

&A           Операция адресации

int &                Модификатор указателя (C++)

label:                  Метка оператора

a ? x : y                     Условный оператор

void func(int n);                           Объявление функции

a = (b+c)*d;                     Выражение со скобками

a, b, c;                     Выражение с запятой

func(a, b, c);                          Вызов функции

a = -b;                   Поразрядное вычитание (дополнение до

единицы)

-func() (*delete a;*)                                 Деструктор (C++)

Унарные операции

&            Операция адресации

*             Операция обращения по ссылке

+            Унарный плюс

-             Унарный минус

тильда               Поразрядное дополнение (дополнение до

единицы)

!             Логическое отрицание

++            Префикс:  пред- инкремент;

Постфикс: пост- инкремент

--              Префикс:  пред- декремент;

Постфикс: пост- декремент

Бинарные операции

Операции типа сложения                  + Бинарный плюс (сложение)

- Бинарный минус (вычитание)

Операции типа умножения   * Умножение

/ Деление

% Остаток от деления

Операции сдвига   << Сдвиг влево

>> Сдвиг вправо

Поразрядные операции   & Поразрядное И

^ Поразрядное исключающее ИЛИ

\! Поразрядное включающее ИЛИ

Логические операции   && Логическое И

\!\! Логическое ИЛИ

Операторы присваивания                  = Присваивание

*=   Присвоить     произведение

/=    Присвоить     частное

%=  Присвоить     остаток

+=   Присвоить     сумму

-=    Присвоить     разность

<<= Присвоить сдвиг влево

>>= Присвоить сдвиг вправо

&= Присвоить поразрядное И

^= Присвоить поразрядное исключающее

ИЛИ

\!= Присвоить поразрядное ИЛИ

Операции отношения   < Меньше

> Больше

<= Меньше или равно

>= Больше или равно

Операции равенства   == Равно

!= Не равно

Операции выбора . Прямой селектор компонента компонента -> Косвенный селектор компонента

Операции с компонентами :: Доступ/разрешение контекста класса .* Обращение через указатель

к компоненту класса

->* Обращение через указатель

к компоненту класса

Условные операции   a ? x : y "Если a то x иначе y"

Операция запятой , Вычислить, например, a, b, c слева - направо

Функции этих операций,также как их синтаксис, приоритет и свойства ассоциативности рассматриваются, начиная со стр. 73 оригинала.

Пунктуаторы

В TurboC++ пунктуаторы, также называемые разделителями, определяются следующим образом:

пунктуатор: одно из

[ ] ( ) (* *) , ; : ... * = #

Квадратные скобки

[] (открывающая и закрывающая квадратные скобки) указывают на индексы одно- и многомерных массивов:

char ch, str[] = "Stan"

int mat[3][4];                         /* матрица 3 x 4 */

ch = str[3];                       /* 4-й элемент */

...

Круглые скобки

() (открывающая и закрывающая круглыескобки) группируют выражения, выделяют условные выражения и указывают на вызовы функций и параметры функций:

d = c * (a + b); /* переопределение нормального приоритета */

/* выполнения операций */

if (d == z) ++x; /* важно при использовании условных операций */

func();                  /* вызов функции без аргументов */

int (*fptr)();   /* объявление указателя функции */

fptr = func; /* отсутствие () означает указатель функции */

void func2(int n); /* объявление функции с аргументами */

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

#define CUBE(x) ((x) * (x) * (x))

Использование круглых скобок для изменения нормальных приоритетов операцийи правил ассоциативности см. на стр.76 оригинала.

Фигурные скобки

(**) (Открывающие и закрывающие фигурныескобки) обозначают начало и конец составного оператора:

if (d == z)

(*

++x

func();

*)

Закрывающая фигурная скобка служит терминатором составного оператора, поэтому (;) (точка с запятой) после *) не требуется, за исключением структур или объявлений классов. Часто точка с запятой недопустима, как например в случае

if (оператор)

(**);              /* недопустимое использование точки с запятой */

else

Запятая

Запятая (,) отделяет элементы списка аргументов функции:

void func(int n, float f, char ch);

Запятая часто используется как операция в "операции с запятой". Обе эти операции являются допустимыми, но для различения их вы должны использовать круглые скобки:

func(i, j);  /* вызов функции с двумя аргументами */

func((exp1, exp2), (exp3, exp4, exp5)); /* также вызов функции с двумя аргументами */

Точка с запятой

Точка с запятой (;) служит терминатором оператора. Любое допустимое выражениеС (включая и пустое выражение), за которым следует (;), интерпретируется как оператор, называемый оператором выражения. Выражениевычисляется, а его значение отбрасывается. Если такое выражение не имеетпобочных эффектов, то TurboC++ может его проигнорировать.

a + b; /* a + b вычисляется, но полученное значение теряется */

++a; /* имеется побочный эффект для a, но результат ++a */

/* теряется */

;              /* пустое выражение = нулевой оператор */

Точки сзапятой частоиспользуются для создания пустых операторов:

for (i = 0; i < t; i++)

(*

;

*)

Двоеточие

Двоеточие (:) служит для обозначения оператора с меткой:

stsrt:                x=0;

...

goto stsrt;

...

switch (a)(*

case 1: puts("Первый");

break;

case 2: puts("Второй");

break;

...

default:   puts("Ни тот, ни другой!");

break;

*)

Метки рассматриваются на стр.92 оригинала.

Многоточие

Многоточие (...) представляет собой три последовательно расположенные точки без пробелов между ними.  Многоточия используются в списках формальных аргументовпрототипов функций для обозначения переменногочисла аргументов, либо аргументов с изменяющимся типом:

void func(int n, char ch,...);

Данное объявление указывает, что func будет определена таким образом, что вызовы ее должны содержать как минимум два аргумента, int и char,но также могут иметь и любое число дополнительных аргументов.

В С++ запятую, предшествующую многоточию, можно опустить.

Звездочка (объявление указателя)

Звездочка (*) в объявлении переменной обозначает создание указателя на тип:

char *char_ptr;  /* объявление указателя на тип char */

Можно объявить указатели с несколькими уровнями косвенности, что обозначается соответствующим количеством звездочек:

int **int_ptr; /* указатель на указатель на int */

double ***double_ptr /* указатель на указатель на указатель на тип double */

Звездочка также используется в качестве операции обращения через указатель, либо операции умножения:

i = *int_ptr;

a = b * 3.14;

Знак равенства (инициализатор)

Знак равенства (=) разделяет объявления переменных от списков инициализации:

char array[5] = (* 1, 2, 3, 4, 5 *);

int x = 5;

В функциях С никакой код не может предшествовать никаким объявлениям переменных. В С++ объявления любого типа могут находиться (с некоторыми ограничениями) в любой точке внутри кода.

В списке аргументов функции С++ знак равенства указывает на значение параметра по умолчанию:

int f(int i = 0) (* ... *) /* параметр i имеет значение по умолчанию ноль */

Знак равенства используется также как операция присвоения в выражениях:

a = b + c;

ptr = farmalloc(sizeof(float)*100);

Знак фунта (директива препроцессора)

Знак фунта (#) означает директиву препроцессора, если она является первым не-пробельным символом встроке. Он задает действие компилятора, не обязательно связанное с генерацией кода. Более подробно директивы препроцессора описаны на стр.133 оригинала.

# и ## (двойной знак фунта) также используются как операции замены и слияния лексем на фазе сканирования кода препроцессором.

Объявления

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

Контекст, видимость, продолжительность и тип компоновки определяют части программы,из которых могут быть сделаны допустимые ссылки на идентификатор сцельюдоступа к соответствующему объекту. Контекст обсуждаетсяна стр.29 оригинала, видимость - на стр.30; продолжительность рассматривается, начиная со стр. 31, а тип компоновки - на стр.32.

Объекты

Объектом называется идентифицируемая область памяти, которая может содержать фиксированное значение переменной (или набор таких значений). (Используемое в данном случае слово "объект" не следует путать с более общим термином, используемым в объектно-ориентированных языках - см. главу 5, "Введение в С++" в документе "Начало работы".) Каждая величина имеет связанное с ней имя и тип (который также называют типом данных). Имя используется для доступа к объекту. Имя может являться простым идентификатором, либо сложнымвыражением, уникальным образом "указывающим" на данный объект.

Тип используется для

- для определения требуемого количества памяти при ее исходном распределении,

- для интерпретации битовых коды, находимых в объектах при последующих к ним обращениях,

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

Turbo C++ поддерживает многие стандартные (предопределенные), а также определяемые пользователем типы данных, включая целочисленныетипы разных размеров, со знаком и без него, числа с плавающей точкой различной точности представления, структуры, объединения, массивыи классы. Кроме того, имеется возможность устанавливать указатели на большинствоэтих объектов и манипулировать ими со многими моделями памяти.

Стандартные библиотеки Turbo C++, а также ваши собственные программы и файлы заголовковобеспечиваютоднозначные идентификаторы (или выводимые из них выражения) и типы, таким образом, что Turbo C++ можетнепротиворечиво выполнять доступ, интерпретировать и (возможно) изменять битовые коды в памяти, соответствующей каждому активному объекту вашей программы.

Объявления устанавливают необходимыесоотношения распределенияпамятимежду идентификаторами и объектами. Каждое объявление связываетидентификатор с некоторым типом данных. Большинство объявлений, известных как объявления определения, также задает создание (т.е. где и когда) объекта; иначе говоря, распределениефизической памяти и ее возможную инициализацию. Прочие объявления, называемые объявлениями ссылки, просто делают указанные в них идентификаторы известными компилятору. Один и тот же идентификатор может иметь множество объявлений ссылки, особенно в многофайловых программах, однако для каждого идентификатора допустимо только одно объявление определения.

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

Именующие выражения (Lvalues)

Именующее выражение представляет собой локатор объекта, выражение, которое обозначает объект. Примером именующего выражения может служить *P, где P это выражение, дающее непустой указатель. Модифицируемое именующее выражение -это идентифицирующее выражение, относящееся к объекту, к которому возможен доступ и допустимо его изменение в памяти. Указатель константы const, например, не является модифицируемым именующим выражением. Указатель на константуможетбыть изменен (а подлежащее обращению по этому указателю значение - не может).

Исторически в слове Lvalues буква L означает "левый"; это означает, что Lvalue допускается в левой части (апринимающей части) оператора присваивания. Здесь в левой части оператора присваивания допустимы только модифицируемые именующие выражения. Например, если a и b - это не являющиеся константами целочисленные идентификаторы с правильно распределеннымидля них областями памяти, тооба они являются модифицируемыми именующими выражениями, и присваиваниятипа a = 1;и b = a + b; вполне допустимы.

Значения переменной (Rvalues)

Выражение a + b не можетявляться именующим выражением, и выражение типа a + b = a недопустимо, поскольку выражение в левой части не относится кобъекту. Такие выражения часто называют значением переменной (значение правой части выражения).

Типы и классы памяти

Для связи идентификаторов с объектами требуется, чтобы каждый идентификаторимел как минимум два атрибута: класс памяти и тип (иногда его называют типомданных). КомпиляторTurboC++ определяет эти атрибуты появным или неявным объявлениям в исходном коде программы.

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

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

Контекст

Контекстом идентификатора называется часть программы, в которой данный идентификатор может быть использован для доступа к связанному сним объекту. Существует пять категорий контекста: блок (или локальный), функция, прототип функции, файл и класс (только для С++). Контекст зависит от того, как и где объявлены идентификаторы.

Контекст блока

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

Контекст функции

Единственными идентификаторами, имеющими контекст типа функции, являются метки операторов. Именаметок могут быть использованыв операторах goto влюбой точке функции,где объявлена данная метка. Метки объявляютсянеявно; для этого записывается имя_метки: и за ним оператор. Имена меток в пределах функции должны быть уникальными.

Контекст прототипа функции

Идентификаторы, объявленные                    в          списке   объявлений

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

Контекст файла

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

Контекст класса (С++)

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

Контекст и пространства имен

Пространство имен - это контекст, в пределах которого идентификатордолженбыть уникальным. В С существует четыре раздельных класса идентификаторов:

1. Имена меток операторов goto. Эти имена должны быть уникальными в пределах функции, в которой они объявлены.

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

В С++ структуры, классы и перечислимые данные относятся к одному и тому же пространству имен.

3. Имена компонентовструктур и объединений.  Они должны быть уникальными в пределах структуры или блока, в которомони определены. На тип или смещение с одним и тем же именем в различных структурах ограничений не существует.

4. Переменные, определения типа и компоненты перечислимых данных. Они должны бытьуникальными вконтексте, где они определены. Идентификаторы, объявленные внешними, должны быть уникальными среди переменных, объявленных вовне.

Видимость

Видимостью идентификатора называется область исходного кода программы, из которого допустим нормальный доступ к связанному с идентификатором объекту.

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

Видимость не может выходить за пределы контекста; но контекст может превышать видимость.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40