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

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

Жанры

Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:

= [ ] –>

Все остальные операторы можно определить и как члены-функции, и как самостоятельные функции.

Обратите внимание на то, что каждый пользовательский тип имеет оператор

=
(присваивание и инициализация),
&
(взятие адреса) и
,
(запятая), определенные по умолчанию.

При перегрузке операторов следует проявлять умеренность и придерживаться общепринятых соглашений.

A.11.

Перечисления

Перечисление (enumeration) определяет тип, содержащий набор именованных значения (перечислителей).

enum Color { green, yellow, red };

По умолчанию первый перечислитель равен нулю

0
, так что
green==0
, а остальные значения увеличиваются на единицу, так что
yellow==1
и
red==2
. Кроме того, можно явно определить значение перечислителя.

enum Day { Monday=1,Tuesday,Wednesday };

Итак,

Monday==1
,
Tuesday==2
и
Wednesday==3
.

Отметим, что перечислители принадлежат не области видимости своего перечисления, а охватывающей области видимости.

int x = green; // OK

int y = Color::green; // ошибка

Перечислители и значения перечислений неявно преобразовываются в целые числа, но целые числа не преобразовываются в типы перечислений неявно.

int x = green; // OK: неявное преобразование Color в int

Color c = green; // OK

c = 2; // ошибка: нет неявного преобразования

// int в Color

c = Color(2); // OK: (непроверяемое) явное преобразование

int y = c; // OK: неявное преобразование Color в int

Использование перечислений обсуждается в разделе 9.5.

A.12. Классы

Класс (class) — это тип, для которого пользователь определил представление его объектов и операции, допустимые для этих объектов.

class X {

public:

// пользовательский интерфейс

private:

// реализация

};

Переменные, функции и типы, определенные в объявлении класса, называются членами этого класса. Технические детали изложены в главе 9.

A.12.1. Доступ к членам класса

Открытый член класса доступен для пользователей; закрытый член класса доступен

только членам класса.

class Date {

public:

// ...

int next_day;

private:

int y, m, d;

};

void Date::next_day { return d+1; } // OK

void f(Date d)

{

int nd = d.d+1; // ошибка: Date::d — закрытый член класса

// ...

}

Структура — это класс, члены которого по умолчанию являются открытыми.

struct S {

// члены (открытые, если явно не объявлены закрытыми)

};

Более подробная информация о доступе к членам класса, включая обсуждение защищенных членов, приведена в разделе 14.3.4.

К членам объекта можно обращаться с помощью оператора

.
(точка), примененного к его имени, или оператора
–>
(стрелка), примененного к указателю на него.

struct Date {

int d, m, y;

int day const { return d; } // определенный в классе

int month const; // просто объявленный; определен

// в другом месте

int year const; // просто объявленный; определен

// в другом месте

};

Date x;

x.d = 15; // доступ через переменную

int y = x.day; // вызов через переменную

Date* p = &x;

p–>m = 7; // доступ через указатель

int z = p–>month; // вызов через указатель

На члены класса можно ссылаться с помощью оператора

::
(разрешение области видимости).

int Date::year const { return y; } // определение за пределами

// класса

В функциях-членах класса можно ссылаться на другие члены класса, не указывая имя класса.

struct Date {

int d, m, y;

int day const { return d; }

// ...

};

Такие имена относятся к объекту, из которого вызвана функция:

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

Моя на одну ночь

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Моя на одну ночь

Черный Маг Императора 8

Герда Александр
8. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 8

Измена. Отбор для предателя

Лаврова Алиса
1. Отбор для предателя
Фантастика:
фэнтези
5.00
рейтинг книги
Измена. Отбор для предателя

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Шаг в бездну

Муравьёв Константин Николаевич
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Шаг в бездну

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Хроники странного королевства. Вторжение. (Дилогия)

Панкеева Оксана Петровна
110. В одном томе
Фантастика:
фэнтези
9.38
рейтинг книги
Хроники странного королевства. Вторжение. (Дилогия)

Часовой ключ

Щерба Наталья Васильевна
1. Часодеи
Фантастика:
фэнтези
9.36
рейтинг книги
Часовой ключ

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Очешуеть! Я - жена дракона?!

Амеличева Елена
Фантастика:
юмористическая фантастика
5.43
рейтинг книги
Очешуеть! Я - жена дракона?!

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9