- •6 Глава 1
- •12 Глава 1
- •14 Глава 1
- •16 Глава 1
- •18 Глава 1
- •20 Глава 1
- •22 Глава 1
- •24 Глава 1
- •26 Глава 1
- •31 Глава 1
- •34 Глава 2
- •36 Глава 2
- •Puc. 2.4. Дополнительные опции консольного приложения Win32
- •38 Глава 2
- •40 Глава 2
- •42 Глава 2
- •44 Глава 2
- •48 Глава 2
- •50 Глава 2
- •52 Глава 2
- •54 Глава 2
- •56 Глава 2
- •58 Глава 2
- •60 Глава 2
- •62 Глава 2
- •64 Глава 2
- •66 Глава 2
- •68 Глава 2
- •70 Глава 2
- •74 Глава 2
- •76 Глава 2
- •79 Глава 2
- •82 Глава 2
- •84 Глава 2
- •86 Глава 2
- •88 Глава 2
- •92 Глава 2
- •94 Глава 2
- •96 Глава 2
- •98 Глава 2
- •103 Глава 2
- •105 Глава 2
- •107 Глава 2
- •110 Глава 2
- •115 Глава 3
- •119 Глава 3
- •121 Глава 3
- •123 Глава 3
- •125 Глава 3
- •129 Глава 3
- •131 Глава 3
- •133 Глава 3
- •139 Глава 3
- •141 Глава 3
- •143 Глава 3
- •145 Глава 3
- •148 Глава 3
- •150 Глава 3
- •155 Глава 3
- •165 Глава 4
- •168 Глава 4
- •170 Глава 4
- •173 Глава 4
- •175 Глава 4
- •178 Глава 4
- •184 Глава 4
- •186 Глава 4
- •188 Глава 4
- •190 Глава 4
- •192 Глава 4
- •194 Глава 4
- •198 Глава 4
- •201 Глава 5
- •203 Глава 5
- •205 Глава 5
- •207 Глава 5
- •213 Глава 5
- •217 Глава 5
- •219 Глава 5
- •221 Глава 5
- •223 Глава 5
- •225 Глава 5
- •227 Глава 5
- •232 Глава 5
- •234 Глава 5
- •236 Глава 5
107 Глава 2
Аргумент true функции ReadKey () подавляет отображение нажатой клавиши в командной строке. Аргумент false (или отсутствие аргумента) заставляет функцию отображать символ нажатой клавиши. Результат выполнения функции сохраняется в keyPress. Чтобы идентифицировать символ, соответствующий нажатой клавише (или клавишам), необходимо использовать выражение keyPress .KeyChar. Таким об- разом, чтобы вывести сообщение, показывающее символ нажатой клавиши, нужно воспользоваться следующим оператором:
Нажатая клавиша идентифицируется выражением keyPress .Key. Это выражение ссылается на значение из перечисления C++/CLI (с которым вы вскоре познакоми- тесь), идентифицирующее нажатую клавишу. Об объекте ConsoleKeylnf о можно ска- зать еще много чего. И в этой книге мы еще к нему вернемся.
Хотя то, что в консольных программах C++/CLI нет форматирования ввода, мо- жет показаться неудобным во время изучения, на практике это ограничение не суще- ственно. Почти все реальные программы, которые вам придется писать, принимают ввод через компоненты окна, поэтому обычно нет необходимости читать данные из командной строки.
Применение safe_cast
Операция safecast предназначена для явных приведений типов в среде CLR. В большинстве случаев вы можете без проблем использовать staticcast для приведе- ния одного типа к другому в программах C++/CLI, но поскольку есть исключения, ко- торые приводят к сообщениям об ошибках, лучше все-таки использовать safecast. Приведение saf ecast применяется точно так же, как staticcast. Например:
Последний оператор приводит каждое из значений типа double к типу int перед тем, как сложить их и присвоить результат wholenumber.
Перечисления C++/CLI
Перечисления в программах C++/CLI существенно отличаются от тех, что приме- няются в программах ISO/ANSI С++. Прежде всего, они и определяются в C++/CLI иначе:
Этот оператор определяет перечислимый тип Suit (масть), и переменным типа Suit можно присваивать значения только из перечня, заданного в определении — Hearts, Clubs, Diamonds и Spades. Когда вы обращаетесь к константам из перечис- ления С++/СЫ, вы всегда должны квалифицировать их именем типа перечисления. Например:
Этот оператор присваивает значение Clubs из перечисления Suit переменной по имени suit. Символ, отделяющий имя типа Suit от имени перечислимой констан- ты Clubs — это операция разрешения контекста, которая указывает на то, что Clubs существует внутри контекста перечисления Suit.
Обратите внимание на ключевое слово class в определении перечисления, кото- рое следует за ключевым словом enum. Оно не появлялось в определении перечисле- ний в ISO/ANSI С++, как вы видели ранее, а идентифицирует только перечисления C++/CLI. Кроме того, оно указывает на еще одно отличие от перечислений ISO/ANSI С++; здесь константы, определенные в перечислении — Hearts, Clubs и так далее — являются объектами, а не простыми значениями фундаментального типа, как в версии ISO/ANSI С++. Фактически, по умолчанию они являются объектами типа Int32, поэ- тому каждая из них инкапсулирует значение типа int; однако перед тем как пытаться использовать их как таковые, вы должны привести эти константы к типу int.
Поскольку перечисления C++/CLI являются типом класса, вы не можете объяв- лять их локально, например, внутри функции, поэтому если вы хотите определить та- кое перечисление для использования, к примеру, в main (), то должны объявить его в глобальном контексте.
Ниже предлагается очень простой пример использования перечисления:
Этот пример выдаст на консоль следующее:
Это легко проиллюстрировать примером.
Описание полученных результатов
Поскольку это тип класса, перечисление Suit не может быть определено внутри функции main (), поэтому его определение помещено перед определением main (), а