Борис Пахомов Санкт Петербург бхв петербург 2013 удк 004. 4 Ббк 32. 973. 26018. 2 П
Скачать 17.38 Mb.
|
String- строку Текст программы показан в листинге 14.12, а результат — на рис. 14.12. Рис 14.12. Результат преобразования string в Листинг 14.12 // 14.12_2011 Прим 11.cpp : main project file. #include "stdafx.h" #include #include { string str = "test"; можно записать итак, используя конструктор //string str = string("test"); cout << str << endl; метод c_str() класса string преобразует строку в обычную С-строку с символом '\0' в качестве признака конца строки. строка такого признака конца не имеет, и этот символ может быть обычным ее символом. строка — это аналог строки в С+ Builder*/ 490 Часть II. Приложения Windows Form String^ str2 = gcnew String(str.c_str()); Console::WriteLine(str2); Console::ReadLine(); } Пример 12. Объявление дескрипторов в native - типах Дескрипторами называют указатели в среде CLR. Именно они указывают на объект в управляемой куче. Напрямую нельзя объявить дескриптор в типе. Например, в функции вы не можете сделать объявление типа такого String ^s; Компилятор вам выдаст ошибку. Файл vcclr.h содержит специальный настраиваемый шаблон gcroot , позволяющий ссылаться на объекты из С+ кучи, те. объекты из неуправляемой кучи могут ссылать на объекты из управляемой кучи. Тем самым устанавливается связь между различными средами. При этом вам позволяется использовать дескриптор в типы (например, в функции) и трактовать его как основной тип. Шаблон gcroot создан на основе класса System::Runtime::InteropServices::GCHandle , который обеспечивает дескрипторами объекты в управляемой куче. Отметим, что сами дескрипторы автоматически удаляются деструктором класса gcroot только тогда, когда они больше не используются. Их нельзя удалять вручную. Если же вы создаете объект в куче (те. в неуправляемой, то должны сами вызвать оператор delete для освобождения ресурса. В режиме исполнения программы поддерживается постоянная связь между дескриптором и CLR- объектом, на который он указывает. Если объект по тем или иным причинам перемещается в куче, дескриптор всегда возвращает новый адрес объекта. Переменная не может получить указатель (предохраняющий объект от перемещения в такой куче, пока она назначена шаблону Текст программы показан в листинге 14.13, а результат — на рис. 14.13. Рис 14.13. Работа с дескриптором в native - памяти Глава 14. Преобразование между нерегулируемыми и регулируемыми указателями Листинг 14.13 // 14.13_2011 Прим 12.cpp : main project file. #include "stdafx.h" #include // reference_to_value_in_native.cpp // compile with: /clr public value struct V структура { String ^str; }; class Native класс { public: член класса — дескриптор v_handle:*/ gcroot< V^ > v_handle; }; int main() функция { Native native; переменная, объявленная в функции V v; переменная дескриптору присваивается значение v, те. формируется ссылка на структуру, из которой теперь можно извлекать ее элементы native.v_handle = v; native.v_handle->str = "Hello to all"; Console::WriteLine("String in V: {0}", native.v_handle->str); Console::ReadLine(); } Пример 13. Работа с дескриптором в native - функции Текст программы показан в листинге 14.14, а результат — на рис. 14.14. Рис 14.14. Результат работы managed - типа в native - функции 492 Часть II. Приложения Windows Листинг 14.14 // 14.14_2011 Прим 13.cpp : main project file. #include "stdafx.h" #include "gcroot.h" #include #pragma managed class StringWrapper класс { private: gcroot (те. дескриптору) адрес строки "ManagedString" в управляемой куче StringWrapper() { String ^ str = gcnew String("ManagedString"); x = str; } /*метод-член класса присваивает переменной targetStr значение дескрипторах, который указывает на строку "ManagedString", и выводит эту строку void PrintString() { String ^ targetStr = x; Console::WriteLine("StringWrapper::x == {0}", targetStr); } }; #pragma unmanaged int main() функция { StringWrapper s; переменная типа s.PrintString(); печать строки "ManagedString" _getch(); } Предметный указатель #include 25 A ASCII 28, 37, 80, 89 Atof 83 Atoi 83 B Bool 87 Break 102 C Case 102 Си С 321 Cin 189 CLR 16, 107 CLS 245 ColorDialog 407 С 298 Continue 103 Cout 189 D DataSet 423 DateTimePicker 357 DialogResult 251 Double 45 E Else 50 Else-If 96 Exit 65, 170 F Fclose 166 Feof 169 Fgetc 166 Fgets 166 FILE 165 FontDialog 407 Fopen 165 Foreign key 419 Form 201 Fprintf 168 Fputc 166 Fputs 166 Friend 147 Fscanf 168 Fseek 167 Fstream 178 Ftell 168 G Gcnew 108 Getch 23 Getchar 37 Gets 178 Goto 104 GroupBox 342 H Header file 25 Hide 208 I If 47 494 Предметный указатель 95 Ifstream 178 ImageList 253 Ios 178 Istream 178 K KeyDown 263 L Label 258 LinkLabel 343 ListBox 288 ListView 274 Long 43 M Main() 17, 23, 25, 28, 33, 35 Malloc 106 MaskedTextBox 317 MenuStrip 266 MS SQL Server 414 N NET Framework, 245 NULL 106 O OpenFileDialog 395 Ostream 178 О 178 P PictureBox 354 PrintDialog 408 Printf 28, 33, 173 ProgressBar 394 Properties 201 Putchar 37 Puts 178 R RadioButton 338 ReadMe.txt 23 Rewind 168 с 20 S Save All 28 SaveFileDialog 401 Scanf 176 ShortcutKeys 270 Sizeof 189 Solution 19 Solution (решение) 19 Solution Explorer 20 Sprintf 79, 177 Sscanf 178 Static 70 Stdafx.cpp 23 Stdafx.h 23 Stderr 172 Stdin 172 Stdout 172 Strcat 80 Strcmp 80 Strcmpi 80 Strcpy 79 Strlen 80 Switch 100 T TabControl 373 TButton 250 TextBox 259 Timer 390 TLabel 258 TPanel 255 Trigger 413 Typedef 121 V Virtual 147 W WebBrowser 282 While 29, 32 Windows Form 1, 197 Предметный указатель А Абстрактные классы 158 Адрес первого элемента массива 61 Арифметические операции 33 Атрибут unsigned 43 Б Битовые поля 138 База данных 413 В Ввод и вывод в Св С+ 178 Ввод строки символов с клавиатуры 59 Вкладка Property Pages 207 Events 205 Toolbox 216 Включение блока на языке ассемблера 75 Внешний ключ 419, 420 Внешняя переменная 66 Возврат к структуре стола по умолчанию 10 Выбор индексов 420 Вызов функции 72 Выпадающие меню 8 Выражение 35 Вьюеры 415 Г Главная функция 19 Главное окно 7 Группировка набора окон 9 Д Движение окрашенных линий 390 Двоичное дерево 133 Деструктор 144 класса 156 Дизайнер форм 216 Добавление новых форм к проекту 220 Домашний телефонный справочник 324 З Заголовок функции 72 Заголовочная часть оператора For 103 Запуск компилятора 23 Знак "присвоить" 31 Значения параметров функции по умолчанию 73 И Имена и типы переменных 30 Индекс 420 массива 52 Инициализация массива 55 Инкапсуляция 144 Интерфейсные функции 163 Использование шаблонов функций 76 К Как создать свой внешний файл 69 Категории памяти 139 Класс 141 Form 216 Классы 143 и структуры 156 компоненты 144 Клиенты 414 Ключевое слово inline 74 Кнопки быстрого вызова 8 Кодирование по Unicode 37 Компиляция и сборка проекта 15 Компоненты, форма и ее модули 146 Консольное приложение 15, 17 Константы 88 символьного типа 88 Конструктор 144 класса 153 Контекстное меню редактора кода 210 Контекстное меню формы 219 Концепция объектно-ориентированного программирования 141 Куча 149 Л Логическая операция && 50 Логическая операция || 50 Логические операции 90 Локальные БД 414 Локальные переменные 66 М Манипуляторы и функции стандартного ввода/вывода в С+ 190 496 Предметный указатель Маршалинг 471 Маршаллизация 108 Маска 317 Массив 51 Массивы указателей 117 Место описания функции в программе 59 Метка 104 Метод двоичного поиска 127 половинного деления 96 Методы класса 142 Многомерные массивы 54 Модель базы данных 415 Н Наборы данных 423 Наследование 145 Настройка редактора кода 212 Некоторые методы формы 235 Некоторые файлы проекта 202 Нерегулируемые указатели 107 Нормализации 415 Нумерация битов в числе 85 О О справочной системе Help 13 Область действия идентификатора 74 переменной 69 Обращение к элементам структур 122 Объект 141 Объектно-ориентированное программирование 141 Объявление и определение функции 73 Ограничение доступа к элементам меню 270 Одномерные массивы 51 Окно Properties 204 сведений об объекте 204 Оператор #define 35 -- 44 ++ 44 Присвоить" (особенности) 50 Do…While 83 New и Delete 149 For 34 Return 58, 61 Switch 102 Оператор в С/С++ 23 Операторы SQL 421 Операторы и блоки 95 Операция \\ 47 << и >> 179 отношения 89, 90 запятая" 63 деления 33 отрицания 90 Операции и выражения присваивания 93 Операции над указателями 111 Определение функции 72 Опции окна 10 Организация работы с множеством форм 221 Основные функции для работы с файлами в С 166 П Палитра компонентов 217 Первичный ключ 418, 419 Перегрузка функций 75 Передача функции адресов 59 Перечислимый тип данных 86 Побитовые логические операции 92 Подключение библиотечного и собственного файла к программе 67 Подсчет количества слов в файле 48 количества строк в файле 47 символов в файле 42, 44 Полиморфизм 146 Поля класса 142 Преобразование числовых данных 249 Преобразования типов данных 91 Признак комментария 39 конца строки 52, 60 конца строки символов 63 конца файла 38 Примеры создания классов 147 Принудительное преобразование к типу 91 Принципы построения классов 144 Программа копирования символьного файла 39, 42 на С/С++ 28 подсчета количества встречающихся в тексте слов 133 с аргументами-указателями 112 Предметный указатель с аргументами-функциями 118 где функция — член структуры 123 отладчик 61 Программы с использованием классов 147 со структурами 125 Проектирование баз данных 414 таблиц 417 Пространство имен 180 System 246 Прототип функции 73 Прямоугольные таблицы 414 Р Работа с бинарным файлом 187 датами 365 классом fstream 181 классом ifstream 185 классом ofstream 184 логическими данными 249 переменными типа String 247 целыми и вещественными переменными 248 Рабочий стол среды С+ 7 Размерность массива 52 Регистрация пользователя в приложении 380 Регулируемый указатель 16, 107 Редактор кода 208 Рекурсивные функции 72 Рекурсия в структурах 133 Рисование графиков в форме 237 С Свойства класса 142 формы 221 Серверы 414 Символические константы 35 Символьные данные 37 Cмысл квалификатора unsigned 86 Cтруктура FILE 165 События формы 234 Создание проекта приложения 197 простого шаблона функции 76 функций 57 Специальный тип void(), 57 Ссылочный тип классов 156 Стандартный ввод cin 193 Стандартный ввод/вывод в С 172 Стандартный ввод/вывод в С+ 189 Стандартный вывод cout 189 Статическая переменная 74 Статические функции 158 Стековая память 58 Структура программ в VC++ 15 Структуры 120 и функции 125 Суфлер кода 212 Т Таблица кодов ASCII, структура 52 Тело функции 72 Тип auto 32 Типы данных 23 Точка с запятой 31 Транзакция 419 Триггер 413 У Удаленные БД 414 Указатели 105 * и ^ 16, 108 this 208 и массивы 109 на функции 118 символов и функций 113 Унарная операция 90 Уникальный ключ 419 Управляющий символ 28 Условие окончания цикла 32, 33, 35 Условное выражение 95 Ф Формальные параметры 58 Форматные строки даты и времени 359 Функция стандартного ввода/вывода в С 172 char 84 malloc() 92 Функция выделения подстроки из строки 62 копирования строки в строку 63 498 Предметный указатель Х Хранимые процедуры 413 Ч Числа c плавающей точкой 31 Э Экземпляр структуры 138 Эхо-сопровождение 40 Я Язык SQL 420 |