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

абстрактный_описатель: пустой * абстрактный_описатель абстрактный_описатель ( списоко_писателей_параметров) абстрактный_описатель [ константное_выражение opt ] ( абстрактный_описатель )

Возможно единственным образом идентифицировать положение в абстрактном_описателе, где должен стоять идентификатор в случае, если бы конструкция была описателем в описании. Тогда именованный тип является – тот же, что и тип гипотетического идентификатора. Например,

int int * int *[3] int (*)[3] int * int (*)

именуют, соответсвенно, типы «целое», «указатель на цлое», «массив из 3 указателей на целые», «указатель на массив из 3 целых», «функция, возвращающая указатель на целое» и «указатель на функцию, возвращающую целое».

8.8 Typedef – определение типа

Описания, содержащие спецификатор_описания typedef, определяют идентификаторы, которы позднее могут использоваться так, как если бы они были ключевыми словами, именующими оновные или производные типы.

typedef-имя: идентификатор

Внутри области видимости описания, содержащего typedef, каждый идентификатор, возникающий как часть какого-либо опсателя, становится в этом месте синтаксически эквивалентным ключевому слову типа, которое именует тип, ассоциированный с идентификатором таким обрахом, как описывается в #8.4. Спецфикатор_описания typedef не может использоваться для члена класса. Имя класса или перечисления также является typedef-именем. Например, после

typedef int MILES, *KLICKSP; struct complex (* double re, im; *);

каждая из конструкций

MILES distance; extern KLICKSP metricp; complex z, *zp;

является допустимым описанием; distance имеет тип int, metricp имеет тип «указатель на int».

typedef вводит не новые типы, но только синонимы для тпов, которые могли бы быть определены другим путем. Так в приведенном выше примере distance рассматривается как имеющая в точности тот же тип, что и любой другой int объект.

Но описание класса вводит новый тип. Например:

struct X (* int a; *); struct Y (* int a; *); X a1; Y a2; int a3;

описывает три переменных трех различных типов.

Описание вида

описание_имени: сост идентификатор ; enum идентификатор ;

специфицирует, что идентификатор является именем некотрого (возможно, еще не определенного) класса или перечислния. Такие описания позволяют описывать классы, ссылающихся друг на друга. Например:

class vector;

class matrix (* // ... friend vector operator*(matrix amp;, vector amp;); *);

class vector (* // ... friend matrix operator*(matrix amp;, vector amp;); *);

8.9 Перегруженные имена функций

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

Поиск того, какую функцию вызвать, осуществляется в три отдельных шага:

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

Искать соответствующую с использованием стандартных пробразований (#6.6-8) и использовать любую найденную.

Искать соответствующую с использованием определенных пользователем преобразований (#6.5.6). Если найдено единтвенное множество преобразований, использовать ее.

Ноль, char или short считаются точно соответствующими формальному параметру типа int. Float считаются точно сооветствующими формальному параметру типа double.

Над параметром перегруженной функции выполняются только следующе преобразования: int в long, int в double и преобрзования указателей и ссылок (#6.7-8).

Для того, чтобы перегрузить имя функции не члена и не функции operator, любому описанию функции должно предшестввать описание overload, см. #8.1. Например:

overload abs; double abs(double); int abs(int);

abs(1); // вызывается abs(int); abs(1.0); // вызывается abs(double);

Например:

class X (* ... X (int); *); class Y (* ... Y (int); *);

class Z (* ... Z (char*); *);

overload int f (X), f (Y); overload int g (X), g (Z);

f (1); // недопустимо: f(X(1)) или f(Y(1)) g (1); // g(X(1)) g («asdf»); // g(Z(«asdf»))

Операция взятия адреса amp; может применяться к перегруженому имени только в присваивании или инициализации, когда ожидаемый тип определяет, адрес какой функции брать. Напрмер:

int operator=(matrix amp;, matrix amp;); int operator=(vector amp;, vector amp;); int (*pfm)(matrix amp;, matrix amp;) = amp;operator=; int (*pfv)(vector amp;, vector amp;) = amp;operator=; int (*pfx)(...) = amp;operator=;

8.10 Описания перечислений

Перечисления являются типами int с именованными констатами.

enum_спецификатор: enum идентификатор opt (* enum_список *)

enum_список: перечислитель enum_список , перечислитель

перечислитель: идентификатор идентификатор = константное_выражение

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

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

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

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

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

ОС и Сети / Программирование / Книги по IT
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

Вандад Нахавандипур

Программирование, программы, базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT