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

Спецификаторы формата в форматной строке, такие как %c и %s, определяют способ использования аргументов. Как показано выше, это может привести к ужасным последствиям. В языке C++ неопределенных аргументов лучше избегать. 

<p id="AutBody_Root608"><strong>A.9.4. Спецификации связей</strong></p>

Код на языке С++ часто используется наряду с кодом на языке С в одной и той же программе; иначе говоря, одни части бывают написаны на языке С++ (и скомпилированы с помощью компилятора языка С++), а другие — на языке С (и скомпилированы с помощью компилятора языка С). Для того чтобы воспользоваться этой возможностью, язык С++ предлагает программистам спецификации связей (linkage specifications), указывающие, что та или иная функция может быть вызвана из модуля, написанного на языке С. Спецификацию связи с языком С можно поместить перед объявлением функции.

extern "C" void callable_from_C(int);

В качестве альтернативы ее можно применить ко всем объявлениям в блоке.

extern "C" {

void callable_from_C(int);

int and_this_one_also(double, int*);

/* ... */

}

Детали можно найти в разделе 27.2.3.

В языке С нет возможности перегружать функции, поэтому можете поместить спецификацию связи с языком С только в одной версии перегруженной функции.

<p id="AutBody_Root609"><strong>A.10. Типы, определенные пользователем</strong></p>

Есть два способа определить новый (пользовательский) тип: в виде класса (class, struct и union; см. раздел A.12) и в виде перечисления (enum; см. раздел A.11). 

<p id="AutBody_Root610"><strong>A.10.1. Перегрузка операций</strong></p>

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

Matrix operator+(const Matrix&, const Matrix&);

Примеры можно найти в определениях классов std::ostream (см. главы 10-11), std::vector (см. главы 17–19 и раздел Б.4), std::complex (см. раздел Б.9.3) и Matrix (см. главу 24).

Перегрузить можно все операторы за исключением следующих:

?: . .* :: sizeof typeid

Функции, определяющие следующие операторы, должны быть членами класса:

= [ ] ( ) –>

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

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

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

<p id="AutBody_Root611"><strong>A.11. Перечисления</strong></p>

Перечисление (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.

<p id="AutBody_Root612"><strong>A.12. Классы</strong></p>

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

class X {

public:

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

private:

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

};

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

<p id="AutBody_Root613"><strong>A.12.1. Доступ к членам класса</strong></p>
Перейти на страницу:

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных