Чтение онлайн

на главную - закладки

Жанры

Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:

int count;

cin >> count; // оператор >> считывает целое число в объект count

string name;

cin >> name; // оператор >> считывает строку в переменную name

int c2 = count+2; // оператор + складывает целые числа

string s2 = name + " Jr. "; // оператор + добавляет символы

int c3 = count–2; // оператор – вычитает целые числа

string s3 = name – "Jr. "; // ошибка: оператор – для строк не определен

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

int age = –100;

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

Пустые ячейки означают, что операция не может применяться к данному типу непосредственно (хотя существует множество косвенных способов их использования; см. раздел 3.9.1). Со временем мы объясним все эти операции. Дело в том, что существует множество полезных операций и их смысл у схожих типов почти одинаков.

Рассмотрим пример, в котором фигурируют числа с плавающей точкой.

// простая программа, демонстрирующая работу операторов

int main

{

cout << "Пожалуйста, введите значение с плавающей точкой: ";

double n;

cin >> n;

cout << "n == " << n

<< "\nn+1 == " << n+1

<< "\n три раза по n == " << 3*n

<< "\n два раза по n == " << n+n

<< "\nn в квадрате == " << n*n

<< "\n половина n == " << n/2

<< "\n корень квадратный из n == " << sqrt(n)

<< endl; // синоним перехода на новую строку ("end of line")

}

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

sqrt(n)
из стандартной библиотеки. Система обозначений близка к математической. Более подробно функции рассматриваются в разделах 4.5 и 8.5.

ПОПРОБУЙТЕ

Запустите эту небольшую программу. Затем измените ее так, чтобы считать значение типа

int
, а не
double
. Обратите внимание на то, что функция
sqrt
для целых чисел не определена, поэтому присвойте число переменной типа
double
и лишь затем примените к ней функцию
sqrt
.
Кроме того, выполните несколько других операций. Обратите внимание на то, что операция для целых чисел представляет собой целочисленное деление, а операция — вычисление остатка, так что
5/2
равно
2
(а не
2.5
или
3
), а
5%2
равно
1
. Определения целочисленных операций
*
,
/
и
%
гарантируют, что для двух положительных переменных
a
и
b
типа
int
выполняется равенство
a/b*b+a%b==a
.

Для типа

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

// ввод имени и отчества

int main

{

cout << "Пожалуйста, введите свое имя и отчество \n";

string first;

string second;

cin >> first >> second; // считываем две строки

string name = first + ' ' + second; // конкатенируем строки

cout << "Hello, " << name << '\n';

}

Для строк оператор

+
означает конкатенацию; иначе говоря, если переменные
s1
и
s2
имеют тип
string
, то
s1+s2
является строкой, в которой вслед за символами строки
s1
следуют символы строки
s2
. Например, если строка
s1
имеет значение "
Hello
", а строка
s2
— значение "
World
", то
s1+s2
содержит значение "
HelloWorld
". Особенно полезным является сравнение строк.

// ввод и сравнение имен

int main

{

cout << "Пожалуйста, введите два имени\n";

string first;

string second;

cin >> first >> second; // считываем две строки

if (first == second) cout << " имена совпадают \n";

if (first < second)

cout << first << " по алфавиту предшествует " << second <<'\n';

if (first > second)

cout << first << " по алфавиту следует за " << second <<'\n';

}

Здесь для выбора действия в зависимости от условия использована инструкция

if
, смысл которой будет подробно изложен в разделе 4.4.1.1.

3.5. Присваивание и инициализация

Одним из наиболее интересных операторов является присваивание, которое обозначается символом
=
. Этот оператор присваивает переменной новое значение. Рассмотрим пример.

Поделиться:
Популярные книги

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Великий перелом

Ланцов Михаил Алексеевич
2. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Великий перелом

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6