Читаем C++ полностью

<p>8.4.1 Примеры</p>

Описание

int i; int *pi; int f ; int *fpi ; int (*pif) ;

описывает целое i, указатель pi на целое, функцию f, возвращающую целое, функцию fpi , возвращающую указатель на целое, и указатель pif на функцию, возвращающую целое. Осбенно полезно сравнить последние две. Цепочка *fpi есть *(fpi), как предполагается в описании, и та же конструкция требуется в выражении, вызов функции fpi, и затем использовние косвенного обращения через (указательный) результ, чтобы получить целое. В описателе (*pif) дополнительные скобки необходимы для указания того, что косвенность через указатель на функцию дает функцию, которая затем вызывается. Функции f и fpi описаны как не получающие параметров, а pif как указвающая на функцию, не получающую параметров.

Описание

const a = 10, *pc = amp;a, *const cpc = pc; int b, *const cp = amp;b;

описывает a: целую константу, pc: указатель на целую константу, cpc: константный указатель на целую константу, b: целое и cp: константный указатель на целое. Значения a, cpc и cp не могут быть изменены после инициализации. Значение pc может быть изменено, как и объект, указываемый cp. Примеры недопустимых выражений:

a = 1; a++; *pc = 2; cp = amp;a; cpc++;

Примеры допустимых выражений:

b = a; *cp = a; pc++; pc = cpc; Описание

fseek (FILE*,long,int);

описывает функцию, получающую три параметра указанных типов. Поскольку тип возвращаемого значения не задан, он прнимается int (#8.2). Описание

point (int = 0,int = 0);

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

point (1,2); point (1); point ;

Описание

printf (char* ... );

описывает функцию, которая может вызываться с различными числом и типами параметров. Например

printf («hello, world»); printf («a=%d b=%d»,a,b);

Однако, всегда ее первым параметром должен быть char*.

Описание

float fa[17], *afp[17];

описывает массив чисел с плавающей точкой и массив укзателей на числа с плавающей точкой. И, наконец,

static int x3d[3][5][7];

описывает массив целых, размером 3x6x7. Совсем подробно: x3d является массивом из трех элементов данных; каждый из элементов данных является массивом из пяти массивов; каждый из последних массивов является массивом из семи целых. Пояление каждое из выражений x3d, x3d[i], x3d[i][j], x3d[i][j][k] может быть приемлемо в выражении.

<p>8.4.2 Массивы, указатели и индексирование</p>

Всякий раз, когда в выражении появляется идентификатор типа массива, он преобразуется в указатель на первый элемент массива. Из-за преобразований массивы не являются lvalue. По определению операция индексирования [] интерпретируется таким образом, что E1[E2] идентично *((E1)+(E2)). В силу правил преобразования, применяемых к +, если E1 массив и E2 целое, то E1[E2] отностится к E2-ому члену E1. Поэтому, несмотря на такое проявление асимметрии, индексирование является коммуттивной операцией.

Это правило сообразным образом применяется в случае мнгомерного массива. Если E является n-мерным массивом ранга i* j*...*k, то возникающее в выражении E преобразуется в указтель на (n-1)-мерный массив ранга j*...*k. Если к этому укзателю, явно или неявно, как результат индексирования, примняется операция *, ее результатом является (n-1)-мерный массив, на который указывалось, который сам тут же преобразется в указатель.

Рассмотрим, например,

int x[3][5];

Здесь x – массив целых размером 3*5. Когда x возникает в выражении, он преобразуется в указатель на (первый из трех) 5 – элементный массив из целых. В выражении x[i], которое экввалентно *(x+i), x сначала преобразуется, как было сказано, в указатель, затем i преобразуется к типу x, что включает в сбя умножение i на длину объекта, на который указывает указтель, а именно объект из 5 целых. Результаты складываются, и используется косвенная адресация для получения массива (из 5 целых), который в свою очередь преобразуется в указатель на первое из целых. Если есть еще один индекс, снова используеся тот же параметр; на этот раз результатом является целое.

Именно из всего этого проистекает то, что массивы в С++ хранятся строкообразно (быстрее всего изменяется последний индекс), и что в описании первый индекс помогает определить объем памяти, поглощаемый массивом, но не играет никакой дргой роли в вычислениях индекса.

<p>8.5 Описания классов</p>

Класс есть тип. Его имя становится typedef-имя (см. #8.8), которое может быть использовано даже внутри самого спецификатора класса. Объекты класса состоят из последовтельности членов.

спецификатор_класса: заголовок_класса (* список_членов opt *) заголовок_класса (* список_членов opt public : спсок_членов opt *)

заголовок_класса: сост идентификатор opt сост идентификатор opt : public opt typedef-имя

сост: class struct union

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT