Как я учился программировать на языке С++ >> Глава 1 >> Раздел 11

Главная
Портфолио
Создание Windows приложений
Полезные ссылки
Справочник
Карта сайта
Контакты
"Когда мне понадобится ваше мнение,
 я вам его сообщу
"
  Линдон Джонсон.




Среди множества языков программирования С++ занимает особое место. Он достаточно прост, лаконичен и исключительно эффективен. Язык С++ создан профессионалами для профессионалов и является расширением языка С для поддержки объектно-ориентированной парадигмы программирования.

Содержание


Главная

Часть I
Процедурное программирование в С++

Глава 1
Глава 2
Глава 3
Глава 4
Глава 5
Глава 6

Часть II
Объективно- ориентированное  программирование в С++
 
Глава 7
Глава 8
Глава 9
Глава 10
Глава 11
Глава 12






Часть I - Процедурное программирование в С++
Глава 1 - Основы языка С++
Раздел 11 - Оператор присваивания и приведение данных
Раздел 1 Раздел 2 Раздел 3 Раздел 4 Раздел 5 Раздел 6
Раздел 7 Раздел 8 Раздел 9 Раздел 10 Раздел 11 Раздел 12
Примеры решения задач к Главе 1
Резюме к Главе 1
Контрольные вопросы к Главе 1
Задачи для самостоятельного решения к Главе 1
Примечания




К листингу 1.7 - при компиляции данного кода компилятор выдает сообщение о несоответствии типов данных.


Раздел 11

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

Оператор присваивания ранее уже использовался. Здесь остановимся на некоторых особенностях этого оператора. Главная особенность оператора присваивания в С++ состоит в том, что он возвращает значение. Это означает, что выражение с оператором присваивания может, в свою очередь, быть частью другого выражения. Синтаксис использования оператора присваивания таков: переменная = выражение. При этом в качестве значения присваивается результат, возвращаемый при вычислении выражения.

Результат выражения является тем значением, которое возвращает оператор присваивания. Поэтому помимо обычных присваиваний вида n = 5 допускается многократное использование оператора присваивания в выражениях.

Например, вполне законной является инструкция вида x = y = z = 3, в результате выполнения которой переменным x, y и z присваивается значение 3.

Инструкции могут быть и более замысловатыми. В листинге 1.6 целочисленным переменным n и m командой n = (m = 6) + 3 присваиваются значения 9 и 6 соответственно.

==========>Листинг 1.6 Оператор присваивания

#include <iostream>
using namespace std;
int main(){
int n,m;
n=(m=6)+3;
cout<<"m = "<<m<<"\n";
cout<<"n = "<<n<<"\n";
cout << "Конец задания для самостоятельной работы!" << endl;
    system ("pause");              // ожидаем нажатия кнопки
return 0;
}

==========>Конец Листинга 1.6  Компилированный исполняемый файл листинга 1.6(120Кб, rar)

В соответствии с приведенной командой сначала вычисляется выражение
m=6, значением которого является 6, и при этом такое же значение присваивается переменной m. Далее к этому значению  прибавляется число 3 и результат присваивается переменной n.

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

При этом тип значения выражения приводится в соответствие с типом переменной.

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

==========>Листинг 1.7(См. примечание) Автоматическое преобразование типов при присваивании значения

#include <iostream>
using namespace std;
int main(){
int a;
double x=3.5;
a=x;
cout<<"x="<<x<<"\n";
cout<<"a="<<a<<"\n";
cout << "Конец задания для самостоятельной работы!" << endl;
    system ("pause");             // ожидаем нажатия кнопки
return 0;
}

==========>Конец Листинга 1.7  Компилированный исполняемый файл листинга 1.7(120Кб, rar)

В программе объявляется целочисленная переменная a типа int и инициализируется переменная x типа double со значением 3.5. Далее в программе переменной a в качестве значения присваивается переменная x. В данном случае речь идет о том, что переменной типа int присваивается значение типа double. Поскольку диапазон значений для типа double шире диапазона значений для типа int, происходит урезание значения

В частности, при присваивании отбрасывается дробная часть числа, и переменная a получает значение 3

Если бы переменной типа double присваивалось значение типа int, таких проблем не возникало бы.

Преобразование типов может проявляться и совершенно по-иному. В листинге 1.8 приведен пример кода программы, в которой типа char присваивается значение типа int.

==========>Листинг 1.8 Преобразование int-типа в char-тип.

#include <iostream>
using namespace std;
int main(){
char x;
int n=68;
int z;
x=n;
z='D';
cout<<"x="<<x<<"\n";
cout<<"z="<<z<<"\n";
cout << "Конец задания для самостоятельной работы!" << endl;
    system ("pause");             // ожидаем нажатия кнопки
return 0;
}

==========>Конец Листинга 1.8  Компилированный исполняемый файл листинга 1.8(120Кб, rar)

Целочисленной переменной n типа int присваивается значение 68. Далее эта переменная присваивается в качестве значения переменной x char-типа. В результате автоматического преобразования типов переменная х, в соответствии с кодовой таблицей, получает символьное значение D. В этом же программном коде проиллюстрирована обратная процедура: командой z='D' целочисленной переменной z присваивается в качестве значения символ D. В результате автоматического преобразования символов этой переменной на самом деле будет присвоен целочисленный код символа в кодовой таблице(значение 68).

Автоматическое приведение типов в некоторых случаях может проявляться достаточно неожиданным способом. Например, если операндами при делении являются целые числа, выполняется целочисленное деление. Допустим, в программе объявлены переменные int n = 13, m = 5. Результатом выражения n/m является число 2(целая часть от деления 13 на 5). Для явного приведения типа выражения тот тип, к которому следует привести выражение, указывается в круглых скобках перед выражением. Чтобы в приведенном примере деление было обычным, не целочисленным, можно воспользоваться командой (double) n/m. В результате подучим 2.6.






В основу сайта положена информация из книги
"Самоучитель C++ с примерами и задачами. Книга + CD", СПб, Наука и Техника, 2010. - 480с.: ил.(+CD)
2010 - 2011 Все авторские права сохранены
Hosted by uCoz