Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Лафоре Р. -> "Объектно-ориентированное программирование в С++" -> 30

Объектно-ориентированное программирование в С++ - Лафоре Р.

Лафоре Р. Объектно-ориентированное программирование в С++ — М.: Питер, 2004. — 992 c.
Скачать (прямая ссылка): obektnoorentprogramm2004.djvu
Предыдущая << 1 .. 24 25 26 27 28 29 < 30 > 31 32 33 34 35 36 .. 341 >> Следующая


intVar = (static_cast<double>(іntVar) * 10) / 10: cout « "Значение intVar равно " « intVar « endl:

// верный результат

return 0:

}

Когда мы умножаем переменную intVar на 10, получаемый результат, равный 15 ООО ООО ООО, нельзя хранить даже с помощью типа unsigned int, поскольку это приведет к получению неверного результата, подобного уже рассмотренному.

Конечно, мы могли бы изменить тип данных на double, которого было бы достаточно для хранения нашего числа, поскольку тип double позволяет хранить 78

Глава 2. Ot новы программирования на С++

числа длиной до 1." знаков. Но если мы не можем позволить себе подобный выход, например из-, л небольшого количества имеющейся в наличии памяти, то существует другой способ — привести переменную intVar перед умножением к типу double. Оператор static_cast<double>(ir-rVar)

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

Значение intVar равно г 11509811 Значение intVar равно 15G0000000

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

До появления 'тандартного С++ приведение типов осуществлялось в несколько ином формате. Если сейчас оператор с приведением типов выглядит так: aCharVar - statlc_casl<char>(an!ntVar); то раньше он записывался подобным образом:

aCharVar - (char)anlnfvar; или

aCharVar - char (an Inu ;

Недостаток nor н>дних двух форматов заключается в том, что их трудно найти в листинге как .іізуально, так и с помощью команды поиска редактора кода. Формат, используі пций static_cast, проще обнаружить как одним, так и другим способом. Несмо'і). і на то, что старые способы приведения типа до сих пор поддерживаются компиляторами, их употребление не рекомендуется.

Приведение ти !ob следует использовать только в случае полной уверенности в его необхі іимости и понимания, для чего оно делается. Возможность приведения делае; типы данных незащищенными от потенциальных ошибок, поскольку компилятор не может проконтролировать корректность действий при изменении Т1!::ов данных. Но в некоторых случаях приведение типов оказывается совершогно необходимым, и мы убедимся в этом в наших будущих примерах.

Арифметические операции

Как вы уже, вероятно, заметили, в языке С++ используются четыре основные арифметические он -рации: сложения, вычитания, умножения и деления, обозначаемые соответствен- +,-,*, /. Эти операции применимы как к целым типам данных, так и к веществен;. .їм. и их использование практически ничем не отличается ни Арифметические операции_79

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

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

Существует еще одна арифметическая операция, которая применяется только к целым числам типа char, short, int и long. Эта операция называется операцией остатка от деления и обозначается знаком процента %. Результатом этой операции, иногда также называемой «взятием по модулю», является остаток, получаемый при делении ее левого операнда на правый. Программа REMAIND демонстрирует применение этой операции. // remaind.cpp

// применение операции остатка от деления #іпсіude <iostream> using namespace std:

int mainO {

cout «6 %8 «end! //6 «7 *8 «endl //7 «8 *8 «endl //0 «9 *8 «endl //1 «10 18 «endl: //2 return 0:

і

В этой программе берутся остатки от деления чисел 6, 7, 8 , 9 и 10 на 8, а результаты — 6, 7, 0, 1 и 2 — выводятся на экран. Операция остатка от деления используется довольно широко, и она еще понадобится нам в других программах. Заметим, что в операторе

cout « 6 Ж 8

операция остатка от деления выполняется раньше, чем операция «, поскольку приоритет последней ниже. Если бы это было не так, то мы были бы вынуждены заключить операцию 6 % 8 в скобки, чтобы выполнить ее до посылки в поток вывода.

Арифметические операции с присваиванием

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

В большинстве языков программирования типичным является оператор, подобный

total - total + item: // сложение total и item

В данном случае вы производите сложение с замещением уже существующего значения одного из слагаемых. Но такая форма оператора не отличается кратко- 80 Глава 2. Ot новы программирования на С++

стью, поскольку нам приходится дважды использовать в нем имя total. В С++ существует способ сократить подобные операторы, применяя арифметические операции с присваиванием. Такие операции комбинируют арифметическую операцию и операцию присваивания, тем самым исключая необходимость использования имени переменной дважды. Предыдущий оператор можно записать с помощью сложения с присваиванием следующим образом: total +- item: Il сложение total и item
Предыдущая << 1 .. 24 25 26 27 28 29 < 30 > 31 32 33 34 35 36 .. 341 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100