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

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

Жанры

Шрифт:

}

else

in = cm = 0;

cout << in << «in=» << cm << «cm\n»;}

25. Оператор switch, break. Копирование строки

Оператор switch дает возможность сопоставления значения с множеством констант. Проверки в предыдущем примере можно представить в следующем виде:

switch (ch) {

case

in = x;

cm = x*fac;

break;

case 'c':

in = x/fac;

cm = x;

break;

default:

in = cm = 0;

break;

}

Операторы break

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

Покажем копирование строки, когда заданы указатель p на ее первый символ и указатель q на целевую строку. По соглашению строка заканчивается символом с целым значением 0.

while (p!= 0) {

*q = *p; // скопировать символ q = q+1;

p = p+1;

}

*q = 0; // завершающий символ 0 скопирован не был.

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

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

while (*p) *q++ = *p++;

*q = 0;

где конструкция *p++ значит: «взять символ, на который задает p, затем увеличить p».

26. Описание функций

При использовании операции ++ к целой переменной к ней просто добавляется единица. Первая часть оператора for не обязательно должна быть описанием, она может быть простым оператором. К примеру:

for (i=0; i<10; i++) q[i]=»p[i];»

тоже по смыслу соответствует предыдущей записи при условии, что i соответствующим образом описано раньше.

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

Например:

for (int i = 1; i

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

extern float pow(float, int); //pow

main

{

for (int i=0; i<10; cout << pow(2,i) << «\n»; }

Первая строка функции – описание, которое указывает, что pow – функция, которая получает параметры типа float и int и возвращает float. Описание функции применяется для выполнения определенных обращений к функции в других местах. При

вызове тип любого параметра функции сопоставляется с ожидаемым типом аналогично тому, как если бы инициализировалась переменная приведенного типа. Это дает гарантии надлежащей проверки и преобразования типов. К примеру, обращение pow (12.3, «abcd») вызовет недовольство компилятора, так как «abcd» является строкой, а не int. В случае вызова (2,i) компилятор преобразует 2 к типу float, т. е. требуется функция. Функция pow может быть определена, к примеру, следующим образом:

float pow(float x, int n)

{

if (n < 0) error(«извините, отрицательный показатель для pow»); switch(n) {case 0: return 1; case 1: return x; default: return x*pow(x,n-1);}}

27. Исходные файлы С++

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

extern double sqrt(double); extern instream cin;

Самый простой способ обеспечить согласованность исходных файлов – помещение таких же описаний в отдельные файлы, которые называются заголовочными (или хэдер) файлами, после чего включить, т. е. скопировать, эти заголовочные файлы во все файлы, где необходимы эти описания. К примеру, если описание sqrt располагается в заголовочном файле для стандартных математических функций math.h и необходимо извлечь квадратный корень из 4, следует применить программу:

#include

//…

x = sqrt(4);

Так как обычные заголовочные файлы состоят из большого числа исходных файлов, в них нет описаний, которые не должны повторяться.

В команде включения include имя файла, которое располагается в угловых скобках, например, относится к файлу с таким именем в стандартном каталоге (обычно это /usr/include/CC); на файлы, хранящиеся в других местах, ссылаются, применяя имена, расположенные в двойных кавычках. Например:

#include «math1.h» #include «/usr/bs/math2.h»

включит math1.h из текущего пользовательского каталога, а math2.h из каталога /usr/bs.

Покажем, как мы могли бы определить тип потока вывода ostream. Для упрощения задачи предположим, что для буферизации определен тип streambuf. Тип streambuf определен в том месте, где также располагается и настоящее определение ostream. Значение типа, определяемого пользователем, специфицирует данные, которые нужны для представления объекта этого типа, и большое число операций для работы с этими объектами. Определение состоит из двух частей: закрытой (private) части, в которой находится информация, используемая только его разработчиком, и открытой (public) части, являющейся интерфейсом типа с пользователем.

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

Искатель 9

Шиленко Сергей
9. Валинор
Фантастика:
рпг
фэнтези
попаданцы
гаремник
5.00
рейтинг книги
Искатель 9

Первый среди равных. Книга XII

Бор Жорж
12. Первый среди Равных
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Первый среди равных. Книга XII

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Я царь. Книга XXVIII

Дрейк Сириус
28. Дорогой барон!
Фантастика:
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Я царь. Книга XXVIII

Неудержимый. Книга XX

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

Древесный маг Орловского княжества 6

Павлов Игорь Васильевич
6. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 6

Последний Герой. Том 5

Дамиров Рафаэль
5. Последний герой
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Последний Герой. Том 5

"Инквизитор". Компиляция. Книги 1-12

Конофальский Борис
Фантастика:
фэнтези
5.00
рейтинг книги
Инквизитор. Компиляция. Книги 1-12

#Бояръ-Аниме. Газлайтер. Том 24

Володин Григорий Григорьевич
24. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 24

Матабар. II

Клеванский Кирилл Сергеевич
2. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар. II

Прапорщик. Назад в СССР. Книга 7

Гаусс Максим
7. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прапорщик. Назад в СССР. Книга 7

Жена со скидкой, или Случайный брак

Ардова Алиса
Любовные романы:
любовно-фантастические романы
8.15
рейтинг книги
Жена со скидкой, или Случайный брак

Очкарик 2

Афанасьев Семен
2. Очкарик
Фантастика:
фэнтези
альтернативная история
5.00
рейтинг книги
Очкарик 2

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши