Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ekzamen_infa.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
635.5 Кб
Скачать

10. Оператор присвоения. Комбинированные операторы присвоения. Математические и логические операции, операции сравнения . Ограничения на применения операторов(несовместимость типов).

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

Переменная = выражение;

Алгоритм выполнения:

 2KG8A;O5BAO 2K@065=85;

 5A;8 =5>1E>48<>, D>@<0B ?@54AB02;5=8O @57C;LB0B0 ?@82>48BAO 2 A>>B25BAB285 A B8?>< ?5@5<5==>9;

 ?>;CG5==K9 @57C;LB0B 703@C605BAO 2 ?>;5 2KG8A;O5<>9 ?5@5<5==>9.

Комбинированные операторы присваивания в языках C/C++

Набор операторов присваивания в языках C/C++ значительно богаче, чем в других языках программирования. Всевозможные комбинированные операторы присваивания позволяют предельно сжать программный код.

В следующих строках показаны некоторые выражения присваивания, стандартные для большинства языков высокого уровня:

irow_index = irow_index + irow_increment;

ddepth = ddepth - dl_fathom;

fcalculate_tax = fcalculate_tax * 1.07;

fyards = fya.rds / ifeet_convert;

Теперь посмотрим, как эти же выражения будут выглядеть в C/C++:

irow_index += irow_increment;

ddepth -= dl_fathom;

fcalculate_tax *= 1.07;

fyards /= ifeet_convert;

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

Логические операции (&& и ||).

Результатом логической операции является true или false. Результат операции && имеет значение true, только если оба операнда имеют значение true. Результат операции || имеет значение true, если хотя бы один из операндов имеет значение true. Логические операции выполняются слева направо. Если значения первого операнда достаточно, чтобы определить результат операции, второй операнд не вычисляется.

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

Операции выполняются в соответствии с приоритетами. Для изменения порядка выполнения операций используются круглые скобки. Если в одном выражении записано несколько операций одинакового приоритета, унарные операции, условная операция и операции присваивания выполняются справа налево, остальные – слева направо. Например, а = b = с означает а = (b = с), а а + b + с означает (а + b) + с.

Допустимы выражения вида а = b = с: сначала вычисляется выражение b = с, а затем его результат становится правым операндом для операции присваивания переменной а.

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

Основные математические операции С++

+

Сложение

total = cost + tax;

-

Вычитание

change = payment - total;

*.

Умножение

tax = cost * tax_rate;

/

Деление

average = total / count;

Операции отношения (<, <=, >, >=, ==, !=) сравнивают первый операнд со вторым. Операнды могут быть арифметического типа или указателями. Результатом операции является значение true или false (любое значение, не равное нулю, интерпретируется как true). Операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции сравнения.

Основные операции языка С++

Операция

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

1

2

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

++

Увеличение на 1(инкремент)

--

Уменьшение на 1(декремент)

sizeof

Размер

~

Поразрядное отрицание

!

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

-

Арифметическое отрицание (унарный минус)

+

Унарный плюс

&

Взятие адреса

*

Разадресация

new

Выделение памяти

delete

Освобождение памяти

(type)

Преобразование типа

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

*

Умножение

/

Деление

%

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

+

Сложение

-

Вычитание

«

Сдвиг влево

»

Сдвиг вправо

<

Меньше

<=

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

>

Больше

>=

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

= =

Равно

!=

Не равно

&

Поразрядная конъюнкция (И)

^

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

|

Поразрядная дизъюнкция (ИЛИ)

&&

Логическое И

||

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

?:

Условная операция (тернарная)

Продолжение табл. 2

1

2

=

Присваивание

*=

Умножение с присваиванием

/=

Деление с присваиванием

%=

Остаток отделения с присваиванием

+=

Сложение с присваиванием

-=

Вычитание с присваиванием

«=

Сдвиг влево с присваиванием

»=

Сдвиг вправо с присваиванием

&=

Поразрядное И с присваиванием

|=

Поразрядное ИЛИ с присваиванием

^=

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

.

Последовательное вычисление

Ограничения на применение операторов в с++( несовместимость типов)

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

2. Управляемые типы не могут иметь друзей (т.е. дружественных функций, классов, структур и интерфейсов). Естественно, данное правило не распространяется на неуправляемые классы C++. Это, конечно, может быть и не так важно для многих программистов, ведь многие рассматривают дружественность как нарушение важной концепции объектно-ориентированного программирования, называемой инкапсуляцией. Неуправляемые типы могут иметь друзей, как и классы в традиционном C++; однако неуправляемые типы могут иметь друзей только из числа неуправляемых типов.

3. В отличие от неуправляемых типов, управляемые не поддерживают множественную наследуемость реализации. Однако как управляемые, так и неуправляемые типы поддерживают множественную наследуемость интерфейсов. Возможность наследовать только одну реализацию является еще одним ограничением, с которым могут смириться многие программисты. Несмотря на то, что традиционный C++ поддерживает множественную наследуемость реализаций, большинство объектно-ориентированных языков (в том числе Java и Smalltalk) ее не поддерживают. Даже модель компонентных объектов Microsoft (COM), которая на двоичном уровне основывается на таблице виртуальных функций в стиле C++, не поддерживает эту возможность.

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

5. Неуправляемый класс, в котором не указан явно базовый класс, является независимым корневым классом. В то же время, управляемый класс, в котором не указан явно ни один класс в качестве базового, является производным от корневого класса System: :Object (Система::Объект).

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

Перечисленные правила использования управляемых типов в C++ подытожены в предлагаемом примере программы. Комментарии помогут вам понять все эти сложные правила. Если вы откроете проект ManagedAndUnmanagedTypes и попробуете раскомментировать каждый из тех операторов (лучше по одному за один проход), который вызывает ошибку компилятора, вы лучше поймете каждое из правил. Всего лишь щелкните на интересующей вас ошибке в окне Task List (Список задач), а затем нажмите F1 для получения документации, в которой разъясняется суть ошибки. И, конечно, двойной щелчок на ошибке в окне Task List (Список задач) приведет вас к соответствующему оператору в окне редактора исходного кода программы.

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