
- •3.8. Упражнения 49
- •Введение
- •1. Базовые элементы
- •1.1. Комментарии
- •1.2. Функция «main»
- •1.3. Идентификаторы и пространства имен
- •1.4. Типы
- •1.5. Переменные
- •1.6. Преобразование типов
- •1.7. Константы
- •1.8. Потоковый ввод – вывод
- •1.9. Операции
- •1.9.1. Арифметические операции
- •1.9.2. Поразрядные операции
- •1.9.3. Условный оператор
- •1.9.4. Операции отношения
- •1.9.5. Логические операции
- •1.10. Стандартные математические функции
- •1.11. Упражнения
- •2. Базовые конструкции
- •2.1 Ветвление
- •2.1.1. Конструкция «if – else»
- •2.1.2. Конструкция «switch»
- •2.2. Циклы
- •2.2.1. Цикл «for»
- •2.2.2. Цикл «while»
- •2.2.3. Цикл «do – while»
- •2.2.4. Операторы циклов
- •2.2.5. Вложенность
- •2.3. Упражнения
- •2.3.1. Ветвления
- •2.3.2. Циклы
- •2.3.3. Вложенность
- •3. Указатели. Массивы. Структуры
- •3.1. Указатели
- •3.2. Массивы
- •3.2.1. Статические массивы
- •3.2.2. Динамические массивы
- •3.4. Ссылки
- •3.5. Структуры
- •3.6. Объединение
- •3.7. Переопределение типов
- •3.8. Упражнения
- •3.8.1. Статические и динамические массивы
- •3.8.2. Многомерные массивы
- •3.8.3. Строки
- •4. Функции
- •4.1. Простые функции
- •4.2. Рекурсия
- •4.3. Указатели и ссылки
- •4.3.1. Передаваемые параметры
- •4.3.2. Возвращаемые значения
- •4.3.3. Ссылки и структуры в функциях
- •4.3.4. Указатели и массивы в функциях
- •4.3.5. Указатели и ссылки на функцию
- •4.4. Шаблоны функций
- •4.5. Упражнения
- •4.5.1. Простые функции
- •4.5.2. Параметры – ссылки и параметры — указатели
- •5. Стандартные классы
- •5.1. Класс «pair»
- •5.2. Класс «complex»
- •5.3. Класс «string»
- •5.4. Контейнеры. Алгоритмы. Итераторы
- •5.5. Класс «vector»
- •5.6. Упражнения
- •5.6.1. Класс «string»
- •5.6.2. Класс «vector»
- •6. Файловый ввод – вывод
- •6.1. Операции
- •6.2. Методы
- •6.3. Флаги
- •6.4. Двоичный режим
- •6.5. Упражнения
- •Ллитература
1.3. Идентификаторы и пространства имен
Идентификатором называют имя класса, переменной, функции и других программных сущностей. Он может состоять из букв латинского алфавита в обоих регистрах, цифр и символа «_» и не должен начинаться с цифры. Язык С++ – регистрозависимый, т.е. идентификаторы «variable» и «VARIABLE» различны. Идентификатор должен быть уникальным, т.е. не должен совпадать с другими идентификаторами или зарезервированным словом. Имена выбираются, отталкиваясь от назначения переменной или функции. Типичным примером является префикс «tmp», говорящий о том, что данная переменная является временной.
Таблица 1.1. Зарезервированные слова.
and |
char |
dynamic_cast |
goto |
not_eq |
short |
try |
and_eq |
class |
else |
if |
operator |
signed |
typedef |
asm |
compl |
enum |
inline |
or |
sizeof |
typeid |
auto |
const |
explicit |
int |
or_eq |
static |
typename |
bitand |
const_cast |
export |
long |
private |
static_cast |
union |
bitor |
continue |
extern |
main |
protected |
struct |
unsigned |
bool |
default |
false |
mutable |
public |
switch |
using |
break |
delete |
float |
namespace |
register |
template |
virtual |
case |
do |
for |
new |
reinterpret_cast |
this |
void |
catch |
double |
friend |
not |
return |
true |
volatile |
|
wchar_t |
while |
xor |
xor_eq |
|
|
Длинные идентификаторы очень неудобны, но в случае повторного использования одного имени, возникнет ошибка – конфликт имен. Подобные проблемы решает контекст идентификатора – пространство имен – «namespace». Все имена группируются в соответствии со своим назначением, и каждой группе присваивается свой идентификатор. Несколько групп могут объединяться в одну. Отдельная группа и есть пространство имен, т.о. уникальность должна соблюдаться лишь в рамках одного (данного) пространства имен.
Обращение к классу или вызов функции происходит посредством оператора разрешения контекста «::». Если, к примеру, в пространстве имен «Math» существует еще одно – «Complex», где находиться искомая функция «Pow()», то ее вызов выглядит так: «Math::Complex::Pow()». Такие обращения утомительно и писать, и читать. Избавиться от этого помогает директива «using». Она позволяет сделать доступным пространство имен без явного к нему обращения: «using namespace Math::Complex». Возможно и включение отдельных идентификаторов «using Math::Complex::Pow». В обоих случаях обращаться к функции можно так, как если бы она являлась членном данного пространства имен. Различие состоит в том, что при включении всего пространства имен «Complex» будут доступны и другие неиспользуемые функции, которые могут вызвать конфликты имен.
В примере строка «using namespace std;» делает доступными все содержимое пространства имен «std». Оно определено в библиотечном файле «iostream», для включения которого необходимо использовать директиву препроцессора «#include» Для использования своих собственных файлов надо вместо символов «<>» использовать «""».