Можно применять операцию ++ для непосредственного указания увеличения, и проверка будет значительно проще:
while (*p) *q++ = *p++;
*q = 0;
где конструкция *p++ значит: «взять символ, на который задает p, затем увеличить p».
При использовании операции ++ к целой переменной к ней просто добавляется единица. Первая часть оператора 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);}}
Программа на 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) части, являющейся интерфейсом типа с пользователем.
Имя вводится в программе с помощью описания, которое задает его тип и, возможно, начальную величину. Даны понятия описания, определения, области видимости имен, времени существования объектов и типов.
Перед использованием имени (идентификатора) в C++ программе оно должно быть описано. То есть следует задать его тип, чтобы сообщить компилятору, к какого вида объектам относится имя. Рассмотрим несколько примеров, показывающих разнообразие описаний:
Читать дальше
Конец ознакомительного отрывка
Купить книгу